Проблема HTTP GET запроса - PullRequest
       4

Проблема HTTP GET запроса

0 голосов
/ 20 января 2011

Я пишу простой загрузчик.Я пытаюсь загрузить изображение jpg.

void accel::download(int threads){
    char msg[] = "HEAD /logos/2011/cezanne11-hp.jpg HTTP/1.0\r\nConnection: close\r\n\r\n";
    int back = send(socketC, (const char *)&msg, strlen(msg), 0);
    char *buff = new char[500];
    back = recv(socketC, buff, 500, 0);

    cout << buff;

    char *buff2 = new char[700];
    char msg2[] = "GET /logos/2011/cezanne11-hp.jpg HTTP/1.0\r\nRange: bytes=0-400\r\nConnection: close\r\n\r\n";
    back = send(socketC, (const char *)&msg2, strlen(msg2), 0);
    back = recv(socketC, buff2, 700, 0);

    cout << back;

}

TCP-соединение уже инициализировано, и первая часть моего кода работает.Он успешно отправляет сообщение HEAD и получает ответ.Но когда он пытается загрузить картинку, recv получает 0. Что может быть не так?Кстати, это школьный проект, поэтому мне не разрешается использовать некоторые необычные библиотеки для выполнения этой операции.Это полный адрес фотографии - http://www.google.com/logos/2011/cezanne11-hp.jpg

Ответы [ 4 ]

4 голосов
/ 20 января 2011

Вы ничего не получаете, потому что вы сказали серверу, что не хотите делать второй запрос, когда указали

Соединение: закрыть

Вваш запрос HEAD.

Это говорит серверу, что вы собираетесь делать только ОДИН запрос и не беспокоиться о том, чтобы ждать секунду.

Попробуйте изменить свой первый запрос на постоянный keep-живое соединение.

"HEAD /logos/2011/cezanne11-hp.jpg HTTP / 1.0 \ r \ nСоединение: keep-alive \ r \ n \ r \ n";

ПРИМЕЧАНИЕ: Если вы не хотите, чтобы сервер отключался, вы можете изменить второй запрос, чтобы он оставался активным.

1 голос
/ 20 января 2011

Вообще говоря, HTTP закрывает сокет.(HTTP 1.1 имеет постоянные (keep-alive) соединения, хотя вы, похоже, просили сервер закрыть соединение с вами в первой команде.)

Поэтому убедитесь, что ваш сокет все еще открыт после первогоПолучать;Я готов поспорить, что это не так.

0 голосов
/ 20 января 2011

После того, как вы выполните то, что говорит chrisaycock, вы можете добавить Host: к своим запросам. Большой общий хостинг и доступ только по IP, скорее всего, начнут давать сбой.

0 голосов
/ 20 января 2011

Вы убедились, что изображение на самом деле отправляется вашему клиенту? Возможно, вы не получаете ответа от сервера.

Попробуйте использовать wireshark для проверки фактической сетевой активности. Это позволит вам увидеть, что именно отправлено и получено. Возможно, вы ничего не получаете с сервера, или в вашем запросе есть проблема, которую вы могли бы обнаружить в реальном сетевом трафике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...