【问题标题】:Partial page return on c client and telnetc客户端和telnet上的部分页面返回
【发布时间】: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


【解决方案1】:

我只是尝试使用以下请求行来请求页面:

GET /asx/research/companyInfo.do?by=asxCode&asxCode=MQG HTTP/1.0
UserAgent: Myself

我得到的结果是:

HTTP/1.0 200 OK
Age: 36
Date: Wed, 30 Jan 2013 07:12:03 GMT
Content-Length: 38060
Content-Type: text/html;charset=ISO-8859-1
Server: Apache
Content-Language: en

包括浏览器获取的整个页面内容。我猜你没有找到你正在寻找的信息的问题来自于页面包含动态 (JavaScript) 部分,这些部分在页面显示在浏览器中后立即加载更多信息。

如果您想从该页面获取特定信息,您必须剖析页面内容,分析 JavaScript 部分并对接口进行逆向工程,这些部分是如何检索信息的。

旁注:如果您负担得起(就空间和复杂性而言),请使用像 curl 这样的库,它已经涵盖了您在实现 HTTP 时必须注意的许多问题。

【讨论】:

    猜你喜欢
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 2011-02-02
    相关资源
    最近更新 更多