curl -u和python请求之间有区别吗

维塔利克·布什维(Vitalik Bushaev)

所以有一个我想翻阅的网页 python.Requests

https://ororo.tv/api/v2/episodes/9

需要基本身份验证。如果我像这样卷曲

 curl -u [email protected]:password https://ororo.tv/api/v2/episodes/9

但是,当尝试在带有Requests库的python中执行相同操作时,我得到了想要的响应,像这样

>>> r = requests.get('https://ororo.tv/api/v2/episodes/9', auth=('[email protected]', 'password'))
>>> r
<Response [520]>

我总是得到520响应。有人可以告诉我,我可能做错了什么?

马丁·彼得斯(Martijn Pieters)

是的,有细微的差异。在发送的标头中存在细微的差异,这些差异显然与此API有关。

如果更改查询使用的URL http://httpbin.org/get(在线HTTP测试服务HTTPBin.org的端点,则可以看到两者之间的差异curlrequests发送:

$ curl -u [email protected]:password http://httpbin.org/get
{
  "args": {},
  "headers": {
    "Accept": "*/*",
    "Authorization": "Basic dGVzdEBleGFtcGxlLmNvbTpwYXNzd29yZA==",
    "Host": "httpbin.org",
    "User-Agent": "curl/7.51.0"
  },
  "origin": "84.92.98.170",
  "url": "http://httpbin.org/get"
}
$ python -c "import requests; print(requests.get('http://httpbin.org/get', auth=('[email protected]', 'password')).text)"
{
  "args": {},
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Authorization": "Basic dGVzdEBleGFtcGxlLmNvbTpwYXNzd29yZA==",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.11.1"
  },
  "origin": "84.92.98.170",
  "url": "http://httpbin.org/get"
}

要突出区别:

  • requests发送一个额外的标头Accept-Encoding,设置为gzip, deflate
  • User-Agent报头的不同; 两者都反映了当前的代理商。

您必须在网站上查看这些标题中的哪一个导致了该问题https://ororo.tv/api/v2当我命令一样更正要使用的URLv2设置标题时,我得到一个有效的响应:httpscurlUser-Agent

>>> headers = {'User-Agent': 'curl/7.51.0'}
>>> r = requests.get('https://ororo.tv/api/v1/episodes/9',
                     auth=('[email protected]', 'password'), headers=headers)
>>> r
<Response [200]>
>>> from pprint import pprint
>>> pprint(r.json())
{'airdate': '2005-10-13',
 'download_url': 'https://static-uk2.ororo.tv/uploads/video/file/9/Everybody.Hates.Chris.S01E04.DVDRip.Everybody.Hates.Sausage_1480525209.mp4?attachment=true&wmsAuthSign=aWQ9ODAzNDI3Kyt2aWRlbys5JnNlcnZlcl90aW1lPTIvOC8yMDE3IDI6Mjc6MDQgUE0maGFzaF92YWx1ZT1kbEpGM3c1bldSOXBOMUg5V2N1S0NnPT0mdmFsaWRtaW51dGVzPTk2MCZzdHJtX2xlbj05NQ%3D%3D',
 'id': 9,
 'name': 'Everybody Hates Sausage',
 'number': '4',
 'plot': 'When Julius buys a big crate of sausage, he makes everyone eat it '
         'with every meal. But Tonya refuses to, causing friction between the '
         'her and Rochelle. While at school, Chris is sentenced to 3 days of '
         'detention after a rumor goes round about him beating up the school '
         'bully, Joey.',
 'resolution': 'SD',
 'season': 1,
 'show_name': 'Everybody hates Chris',
 'subtitles': [{'lang': 'en',
                'url': 'https://uploads.ororo-mirror.tv/uploads/subtitle/file/4867/Everybody.Hates.Chris.S01E04.DVDRip.Everybody.Hates.Sausage.eng.vtt'},
               {'lang': 'ru',
                'url': 'https://uploads.ororo-mirror.tv/uploads/subtitle/file/28629/Everybody.Hates.Chris.S01E04.DVDRip.Everybody.Hates.Sausage.vtt'},
               {'lang': 'es',
                'url': 'https://uploads.ororo-mirror.tv/uploads/subtitle/file/55744/1x04_EH_Sausage.vtt'},
               {'lang': 'pt',
                'url': 'https://uploads.ororo-mirror.tv/uploads/subtitle/file/124429/Everybody_Hates_Chris_104_-_Everybody_Hates_Sausage.vtt'},
               {'lang': 'cs',
                'url': 'https://uploads.ororo-mirror.tv/uploads/subtitle/file/217213/Everybody_Hates_Chris_104_-_Everybody_Hates_Sausages.vtt'},
               {'lang': 'tr',
                'url': 'https://uploads.ororo-mirror.tv/uploads/subtitle/file/192405/Everybody_Hates_Chris_S01E04_-_Everybody_Hates_Sausages-tur.vtt'}],
 'updated_at': 1480640069,
 'url': 'https://static-gra.ororo.tv/uploads/video/file/9/Everybody.Hates.Chris.S01E04.DVDRip.Everybody.Hates.Sausage_1480525209.smil/playlist.m3u8?wmsAuthSign=aWQ9ODAzNDI3Kyt2aWRlbys5JnNlcnZlcl90aW1lPTIvOC8yMDE3IDI6Mjc6MDQgUE0maGFzaF92YWx1ZT1FajlGK2JPMEd3aU1Lc3lnN1M4NlpBPT0mdmFsaWRtaW51dGVzPTk2MCZzdHJtX2xlbj05Ng%3D%3D'}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章