Wget 在 get 请求过程中挂起

Wget 在 get 请求过程中挂起

在 Ubuntu 10.10 中,wget 或 curl 有时会在 get 请求过程中随机挂起:

curl "http://api.indeed.com/ads/apisearch?publisher=7570038743238473"
wget "http://api.indeed.com/ads/apisearch?publisher=7570038743238473" -O - -d

问题似乎出在一些执行请求的低级库中,而不是在标头、cookie 或缓存中。

有任何想法吗?

答案1

对于我来说,此 URL 的获取没有错误或挂起。由于wgetcurl通常是这些低级库,并且它们仅共享 HTTP/TCP 协议,因此错误可能出现在两个地方:

  1. 您这边可能对请求处理不当。我遇到过几次类似的情况,看起来这可能是由于您到服务器的路由上的某个节点的 MTU 小于您的 MTU(通常是您的提供商的 VPN,如果他们使用的话),因此数据包被丢弃(我不知道那里到底发生了什么,因为理论上它们应该是碎片化的)。

    快速检查的方法是降低以太网/WiFi 链路上的 MTU,如下所示:

    sudo ip link set $IFACE mtu 1300
    

    其中 $IFACE 是您的网络接口(eth0wlan0或类似的)。

  2. 请求可能被服务器拖延。服务器可能超载、配置错误或只是选择性地阻止您的请求。这是可能性较小的一种情况,并且无法轻易诊断。

答案2

我的想法:

  • 服务器偶尔会超载。
  • 使用嗅探器(例如Wireshark)查看挂起时发生的情况。
  • 使用 strace 查看 wget/curl 挂起时正在做什么。

答案3

我会用tcpdump看看它到底挂在哪里。你可能会发现一些规律。

相关内容