|
目录问题背景问题定位问题解决问题背景使用Python的requests库对接物联数据的接口之前一直正常运行,昨天突然请求不通了,通过进一步验证发现凡是使用代码调用接口就不通,而使用postman就能调通,请求参数啥的都没变。接口返回的结果如下:\n\n\n\n \n
403
\n
Forbidden
\n å\x9b\xa0æ\x9d\x83é\x99\x90é\x97®é¢\x98æ\x88\x96è¡\x8c为é\x9d\x9eæ³\x95ï¼\x8cæ\x82¨ç\x9a\x84访é\x97®è¢«æ\x8b\x92ç»\x9dã\x80\x82\n \n \n\n问题定位初步断定,在使用requests调用接口时少了点什么,而postman则有这个东西。后来发现,postman在请求的时候自动加上了请求头User-Agent,而代码中headers中没有配置这一项。User-Agent请求头是HTTP请求中的一个头部字段,它包含了发起请求的应用程序的信息。这个字段通常用于告知服务器,发起请求的是哪种浏览器、设备、操作系统或者应用程序。服务器可以根据这个信息来决定是否允许该请求,或者根据不同的客户端类型返回不同的内容。User-Agent字符串通常包含了以下信息:浏览器名称和版本操作系统名称和版本设备类型(如智能手机、平板电脑、桌面电脑)CPU类型默认语言问题解决在代码中加上自定义User-Agent请求头即可:importrequestsurl="……"headers={'User-Agent':"PostmanRuntime/7.39.0"}req=requests.get(url=url,headers=headers)同理,也可以将User-Agent请求头设置为Chrome浏览器:headers={'User-Agent':"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/58.0.3029.110Safari/537.3"}该请求头告诉服务器,请求是由一个运行在Windows10上的64位版本的Chrome58浏览器发起的。
|
|