我使在下面的代码用C GET请求:GET HTTP用C请求(消息体)
char buffer[1024] =
"GET/HTTP/1.1\r\n"
"Host: example.com\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"Accept-Language: en-US,en;q=0.5\r\n"
"User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0\r\n"
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
"Connection: keep-alive\r\n"
"Cache-Control: max-age=0\r\n\r\n";
size_t buffer_len = sizeof(buffer) - 1;
/* Send message to the server */
n = write(sockfd, buffer, buffer_len);
/* Now read server response */
bzero(buffer, strlen(buffer));
n = read(sockfd, buffer, buffer_len);
/* Display result */
printf("%s\n",buffer);
return 0;
正确地响应:
HTTP/1.1 200 OK
Date: Mon, 19 Sep 2016 17:20:48 GMT
Server: Apache
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Length: 6695
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
�
除最后一行这应该是消息正文, 代替html内容它只出现一个符号Does,有谁知道哪里可以解决问题?
'buffer'有多大?看起来您需要从服务器读取至少7000个字符。您可能需要几次调用'read'。 –
我也建议看一下Wireshark,这样你就可以准确地看到发送了什么,使用你的代码和浏览器或者netcat(一个已知的工作客户端)来查看是否有任何差异。 – yano
注意响应中的“内容编码:gzip”。 –