【发布时间】:2013-01-13 19:36:02
【问题描述】:
我正在尝试通过我自己的客户端请求网页,但网页返回的内容缺失。当我尝试 Telnet 页面请求时也会发生同样的情况。我已经尝试过使用此处找到的代码和剥离版本(两者都返回相同的结果):
http://coding.debuntu.org/c-linux-socket-programming-tcp-simple-http-client
我请求的网页是下面的网页,可以从浏览器轻松访问,但是当我尝试使用自己的客户端访问它时,我在 Telnet 和代码中都丢失了大部分内容。我玩过缓冲区大小,一旦这产生了稍微大一点的结果,但在第二次运行时内容消失了。
http://www.asx.com.au/asx/research/companyInfo.do?by=asxCode&asxCode=MQG
如何进行页面请求并获取完整页面源?
【问题讨论】:
-
我正在增加缓冲区大小以接收更多数据,而如果接收客户端可能要求下一个 1028 位块,则可能会忽略网页中的内容部分。如果您要求较小的缓冲区块,则丢失内容的可能性较小。我认为这就是为什么减小缓冲区大小仍然有效的原因。
-
使用为执行 HTTP 请求而构建的库,而不是这种垃圾。例如,试试libcurl。
-
我发现代码没有明显问题。尝试调试它。首先我会从wireshark开始。你看到页面到达网络了吗?如果不是,那么您的请求一定有问题。对比你的程序和浏览器的痕迹,最终你应该可以得到和浏览器一样的页面。如果这仍然不起作用,请调试程序。程序是否检索页面的任何块?为什么会停止?也许您遇到了 cmets 中描述的情况:“在某些情况下,这将不起作用......”
-
很公平@duskwuff。我正在取回网页,但缺少大量内容。在我之前的评论中,我试图解释为什么减小缓冲区大小会产生影响。
标签: c httprequest telnet