代码之家  ›  专栏  ›  技术社区  ›  Chaoming Li

奇怪的curl问题与特定的网站ssl证书

  •  0
  • Chaoming Li  · 技术社区  · 6 年前

    我尝试使用curl从Paricualr网站获取网页,但它给出了以下错误:

    curl -q -v -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://www.saiglobal.com/ --output ./Downloads/test.html
    ....
    *  SSL certificate verify ok.
    } [5 bytes data]
    > GET / HTTP/1.1
    > Host: www.saiglobal.com
    > User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
    > Accept: */*
    > 
      0     0    0     0    0     0      0      0 --:--:--  0:11:53 --:--:--     0* OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104
    * stopped the pause stream!
      0     0    0     0    0     0      0      0 --:--:--  0:11:53 --:--:--     0
    * Closing connection 0
    } [5 bytes data]
    curl: (56) OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104
    

    我不知道发生了什么事。我找不到很多关于错误消息的有用信息。在我的电脑上,错误号是60而不是104。

    但是,在这些机器上使用chrome可以毫无问题地加载页面。其中一个机器的卷曲版本是7.58.0。

    感谢您的帮助。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Steffen Ullrich    6 年前

    问题不是此站点的证书。从调试输出可以清楚地看到,TLS握手已成功完成,在此握手之外,证书无关紧要。

    但是,可以看到这个网站 www.saiglobal.com cdn是否受Akamai cdn和Akamai的保护 features some kind of bot detection :

    $ dig www.saiglobal.com
    ...
    www.saiglobal.com.      45      IN      CNAME   www.saiglobal.com.edgekey.net.
    www.saiglobal.com.edgekey.net. 62 IN    CNAME   e9158.a.akamaiedge.net.
    

    已知此bot检测会使用一些启发式方法来区分bot与普通浏览器,检测bot可能会导致状态代码403拒绝访问或网站的简单挂起-请参阅 Scraping attempts getting 403 error Requests SSL connection timeout .

    在这种特定的情况下,如果添加一些特定的HTTP头,尤其是 Accept-Encoding ,请 Accept-Language , Connection 具有价值 keep-alive User-Agent 哪一个匹配 Mozilla . 如果不添加这些头或具有错误的值,将导致挂起。

    以下内容目前对我有效:

    $ curl -q -v \
       -H "Connection: keep-alive" \
       -H "Accept-Encoding: identity" \
       -H "Accept-Language: en-US" \
       -H "User-Agent: Mozilla/5.0"  \
       https://www.saiglobal.com/
    

    请注意,这会故意尝试绕过bot检测。如果Akamai对bot检测进行更改,它可能会停止工作。

    请注意,由于某种原因,站点的所有者已显式启用bot检测。这意味着,为了自己的利益而故意绕过检测(例如,根据搜集的信息提供一些服务),您可能会遇到法律问题。