【发布时间】:2012-01-04 03:42:25
【问题描述】:
我正在用 C 语言制作一个简单的 http 页面请求器。它使用套接字向主机发送 HTTP/1.0 GET 请求,并解析答案以有效下载 html 文件。 但是,当我发送这样的请求时:
GET http://stackoverflow.com/questions HTTP/1.0
User-Agent: myRequester/1.0
它返回这个
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Date: Mon, 19 Dec 2011 15:28:08 GMT
Content-Length: 54362
Connection: close
但没有正文内容。
是的,我已将 CRLF 放在每一行的末尾,并在末尾放置一个空行。 我通过一个连接只使用一个套接字。而且我还必须坚持使用 HTTP/1.0。
【问题讨论】:
-
您确定您确实在阅读完整的回复吗?这些标头确实表明服务器正在发送正文。
-
是的,我确定。我已经通过 recv() 返回检查了答案长度,之后还对缓冲区进行了 strlen()。
-
但是你读到最后了吗?请注意,recv 不一定会在一次调用中读取完整的响应;您应该重复调用,直到 recv 报告连接已结束。
-
您多次致电
recv,对吗?顺便说一句:您是否尝试过远程登录并输入您的请求以查看会发生什么?例如:telnet stackoverflow.com 80。 (如果你有nc,这甚至比telnet更好。) -
非常抱歉。你俩都是对的。我没有多次调用 recv() 。问题在于我对套接字实现的解释。既然我无法删除我的问题,我是否应该自己回答并解释,这样其他人就不会犯同样的错误?