代码之家  ›  专栏  ›  技术社区  ›  SciGuyMcQ

python请求get失败,但curl命令有效

  •  0
  • SciGuyMcQ  · 技术社区  · 7 年前

    我正试图向网页发出get请求,但使用python2.7时,我一直收到404错误 requests 包裹。但是,使用curl我得到了一个成功的响应,并且它可以与浏览器一起工作。

    蟒蛇

    r = requests.get('https://www.ynet.co.il/articles/07340L-446694800.html')
    r.status_code
      404
    r.headers
      {'backend-cache-control': '', 'Content-Length': '20661', 'WAI': '02',
      'X-me': '08', 'vg_id': '1', 'Content-Encoding': 'gzip', 'Vary': 'Accept-Encoding',
      'Last-Modified': 'Sun, 20 May 2018 01:20:04 GMT', 'Connection': 'keep-alive',
      'V-TTL': '47413', 'Date': 'Sun, 20 May 2018 14:55:21 GMT', 'VX-Cache': 'HIT',
      'Content-Type': 'text/html; charset=UTF-8', 'Accept-Ranges': 'bytes'}
    r.reason
      'Not Found'
    

    卷曲

    curl https://www.ynet.co.il/articles/07340L-446694800.html
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   battlmonstr    7 年前

    代码是正确的,它适用于其他一些站点(请参见 https://repl.it/repls/MemorableUpbeatExams )中。

    此网站在浏览器中为我加载,因此我确认您的问题。

    他们可能会阻止python请求,因为他们不希望自己的站点被bots抓取和分析,但是他们忘记了阻止curl。

    你所做的可能违反了www.ynet.co.il的使用条款,你不应该这样做。

        2
  •  0
  •   Niharika Bitra    6 年前

    在下列情况下显示404:

    1. url不正确,响应实际上是正确的。
    2. URL中的尾随空格
    3. 网站可能不喜欢来自python代码的http(s)请求。通过将“www.”添加到您的referer url来更改标题。

    resp = requests.get(r'http://www.xx.xx.xx.xx/server/rest/line/125')

    headers = {
           'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'
        }
    result = requests.get('https://www.transfermarkt.co.uk', headers=headers)