![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 06.07.2012
Сообщений: 4
|
![]()
Здравствуйте, использую linux(т.е. winAPI не предлогать) и компилятор g++... Хочу с помощью сокетов получить ответ от сервера(nginx), но любой сервер отдаёт ошибку 400 bad request, помогите найти ошибку. Заранее очень благодарен за помощь! Код:
Код:
Последний раз редактировалось rpy3uH; 06.07.2012 в 08:04. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
как минимум не хватает еще одной пары \r\n в конце запроса.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 06.07.2012 в 03:04. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 06.07.2012
Сообщений: 4
|
![]()
Огромное спасибо! Помогло... Только ответ приходит не полностью, только часть, пробовал увеличивать размер buf до 524288, но всё равно та же часть от ответа... В чём может быть проблема?
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 06.07.2012
Сообщений: 4
|
![]()
Насколько я понял проблема в том что recv не успевает получить все данные... Как реализовать проверку получен ли весь ответ или нет? Насколько я понял нужно смотреть на последний символ и сравнивать его с \0 ? Или есть другой способ? Заранее очень благодарен за помощь!!
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
курите описание протокола HTTP
в двух словах: раз указано "Connection: close", то по-простому можно принимать данные, пока сервер не закроет сокет. а по-хорошему, получаем заголовки ответа, заголовки оканчиваются \r\n\r\n сразу после заголовков идут данные размер данных указывается в заголовке Content-Lenght: если такого заголовка нет, то получаем данные, пока сокет не закроется.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
![]() |
![]() |
![]() |
#6 |
Регистрация: 06.07.2012
Сообщений: 4
|
![]()
Ну мне надо хотя бы разобраться с тем как принять ответ полностью, нужно делать бесконечный цикл в котором recv принимает ответ и если в ответе пустота то останавливать цикл? Потом разделять ответ на подстроки по \r\n\r\n, второй элемент и будет содержимое сайта... Так? А нет ли примера такое реализации, наверняка кто-то уже сталкивался)))
|
![]() |
![]() |
![]() |
#7 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
![]()
Некоторые серверы любят выдавать Transfer-Encoding: chunked - здесь уже по \r\n\r\n необязательно конец. Так что RTFM.
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сохранение содержимого в файл и дальнейшая ее загрузка | xrenomx | Общие вопросы Delphi | 4 | 02.08.2011 12:10 |
Загрузка сайта | Onni | JavaScript, Ajax | 2 | 28.04.2011 22:43 |
Загрузка содержимого txt в ListView | foxes | Общие вопросы Delphi | 6 | 27.04.2011 00:07 |
Загрузка изображений с сайта | Johnson | Работа с сетью в Delphi | 2 | 28.08.2009 13:28 |
Загрузка содержимого txt в ListView | Rendll | Компоненты Delphi | 2 | 26.03.2009 11:04 |