|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.07.2012, 01:38 | #1 |
Регистрация: 06.07.2012
Сообщений: 4
|
Сокеты - загрузка содержимого сайта
Здравствуйте, использую linux(т.е. winAPI не предлогать) и компилятор g++... Хочу с помощью сокетов получить ответ от сервера(nginx), но любой сервер отдаёт ошибку 400 bad request, помогите найти ошибку. Заранее очень благодарен за помощь! Код:
Код:
Последний раз редактировалось rpy3uH; 06.07.2012 в 08:04. |
06.07.2012, 03:01 | #2 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
как минимум не хватает еще одной пары \r\n в конце запроса.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 06.07.2012 в 03:04. |
06.07.2012, 15:29 | #3 |
Регистрация: 06.07.2012
Сообщений: 4
|
Огромное спасибо! Помогло... Только ответ приходит не полностью, только часть, пробовал увеличивать размер buf до 524288, но всё равно та же часть от ответа... В чём может быть проблема?
|
06.07.2012, 16:43 | #4 |
Регистрация: 06.07.2012
Сообщений: 4
|
Насколько я понял проблема в том что recv не успевает получить все данные... Как реализовать проверку получен ли весь ответ или нет? Насколько я понял нужно смотреть на последний символ и сравнивать его с \0 ? Или есть другой способ? Заранее очень благодарен за помощь!!
|
06.07.2012, 16:58 | #5 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
курите описание протокола HTTP
в двух словах: раз указано "Connection: close", то по-простому можно принимать данные, пока сервер не закроет сокет. а по-хорошему, получаем заголовки ответа, заголовки оканчиваются \r\n\r\n сразу после заголовков идут данные размер данных указывается в заголовке Content-Lenght: если такого заголовка нет, то получаем данные, пока сокет не закроется.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
06.07.2012, 18:23 | #6 |
Регистрация: 06.07.2012
Сообщений: 4
|
Ну мне надо хотя бы разобраться с тем как принять ответ полностью, нужно делать бесконечный цикл в котором recv принимает ответ и если в ответе пустота то останавливать цикл? Потом разделять ответ на подстроки по \r\n\r\n, второй элемент и будет содержимое сайта... Так? А нет ли примера такое реализации, наверняка кто-то уже сталкивался)))
|
06.07.2012, 20:13 | #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 |