这个问题是关于我的一个机器人的,它的主要重点是抓取。
路径已正确映射,并执行其需要执行的操作。速率限制已经过测试,我确信这不是一个因素,如果是的话,我们收到了实际的回复。
但是,我试图抓取的网页似乎以一种奇怪/不熟悉的安全方式构建,这是我以前从未遇到过的东西。在这里,我想知道它是如何执行的,以及我如何适当地处理它。
当抓取器/机器人正在做它的事情时,发送请求以获得响应,它会在随机时间遇到这种情况,我怀疑这是一种安全措施。根本没有从服务器返回的响应,没有 4xx 错误或任何错误。
乍一看,代理似乎已经死了,但事实并非如此,因为它们不是。代理工作得很好,我可以手动浏览它们的页面,这里没有问题。
服务器只是停止给出响应。
现在要找到解决方法,我需要能够区分超时(对于我的代理)和无响应之间的区别。它们看起来相同,但事实并非如此。
有没有人对这个问题有见解,也许有一种天才的方法可以区分我不知道的那些。
现在要找到解决方法,我需要能够区分超时(对于我的代理)和无响应之间的区别。它们看起来相同,但事实并非如此。
超时是指服务器在特定时间内未响应。无响应意味着服务器要么在超时发生之前关闭连接,要么在超时发生后关闭连接而不发送任何内容。
第一种情况可以通过在超时之前关闭连接来轻松检测到。如果要检测服务器是否仅在当前超时后才会关闭连接而不响应,则唯一的选择是延长超时。服务器中没有任何内容表明服务器将在将来的某个时间关闭连接而不响应。
而且由于您唯一的连接是与代理的连接,因此没有真正的方法来检测问题是在代理还是服务器上。您唯一的希望可能是将等待代理的超时设置为大于代理等待服务器的超时。这样,您可能会从代理获得响应,指示与服务器的连接超时。
它们看起来相同,但事实并非如此。
它们是一样的。没有区别。读取超时意味着数据未在超时期限内到达。无论出于何种原因。TCP不知道,也不能告诉你。在 C 级别,recv()
返回 -1 并带有 errno == EAGAIN/EWOULDBLOCK
。这就是所有的信息。
你问的无异于"数据没有到达:它没有从哪里到达?这不是一个有意义的问题。