Загрузить изображение с помощью winsock - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь загрузить изображение с http://htmlbook.ru/themes/hb/img/logo.png Таким образом, я скачал zip-архив и он открылся без проблем, только изменил расширение на .zip Мой код

const char* url="www.htmlbook.ru";
const char*path="/themes/hb/img/logo.png";


FILE* file;
file = fopen("down.png", "wb");
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != NULL) std::cout << "Error";
SOCKET  req;
char buf[1024];
hostent*hn;
char request[2056];
sockaddr_in adr;
if (INVALID_SOCKET == (req = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))) std::cout << "Error 1";
if (NULL == (hn = gethostbyname(url))) std::cout << "Error 2";
adr.sin_family = AF_INET;
adr.sin_addr.S_un.S_addr = *(DWORD*)hn->h_addr_list[0];
adr.sin_port = htons(80);
strcpy(request, "GET ");
if (path == NULL) {
    strcat(request, "/");
}
else strcat(request, path);
strcat(request, " HTTP/1.1\r\nHost: ");
strcat(request, url);
strcat(request, "\r\nAccept: */*\r\nAccept: image / png\r\n\r\n");
printf("%s", request);
if (SOCKET_ERROR == connect(req, (sockaddr*)&adr, sizeof(adr))) std::cout << "Error 3\n";
if (SOCKET_ERROR == send(req, request, sizeof(request), 0)) std::cout << "Error 4\n";

int len;
do {
    if (SOCKET_ERROR == (len = recv(req, (char *)&buf, sizeof(buf), 0))) { std::cout << "Error 5\n"; break; }
    for (int i = 0; i < len; i++) {
        fputc(buf[i], file);
    }
} while (len != 0);
if (SOCKET_ERROR == closesocket(req)) std::cout << "Error 6\n";

Почему сервер отвечает мне дважды? Ответная головка

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 02 Nov 2018 18:45:50 GMT
Content-Type: image/png
Content-Length: 3357
Last-Modified: Sun, 28 Jul 2013 05:13:46 GMT
Connection: keep-alive
Keep-Alive: timeout=20
ETag: "51f4a88a-d1d"
Expires: Fri, 16 Nov 2018 18:45:50 GMT
Cache-Control: max-age=1209600
Accept-Ranges: bytes

HTTP/1.1 400 Bad Request
Server: nginx
Date: Fri, 02 Nov 2018 18:45:50 GMT
Content-Type: text/html
Content-Length: 166
Connection: close

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>

Я открываю изображение в блокноте и удаляю ответ сервера кроме двоичного текста, но я не могу открыть изображение в окнах просмотра фотографий Как скачивать файлы без заголовка ответа.

...