目录
问题背景
使用python的requests库对接物联数据的接口之前一直正常运行,昨天突然请求不通了,通过进一步验证发现凡是使用代码调用接口就不通,而使用postman就能调通,请求参数啥的都没变。
接口返回的结果如下:
问题定位
初步断定,在使用requests调用接口时少了点什么,而postman则有这个东西。
后来发现,postman在请求的时候自动加上了请求头user-agent,而代码中headers中没有配置这一项。
user-agent请求头是http请求中的一个头部字段,它包含了发起请求的应用程序的信息。这个字段通常用于告知服务器,发起请求的是哪种浏览器、设备、操作系统或者应用程序。服务器可以根据这个信息来决定是否允许该请求,或者根据不同的客户端类型返回不同的内容。
user-agent字符串通常包含了以下信息:
- 浏览器名称和版本
- 操作系统名称和版本
- 设备类型(如智能手机、平板电脑、桌面电脑)
- cpu类型
- 默认语言
问题解决
在代码中加上自定义user-agent请求头即可:
import requests
url = "……"
headers = {'user-agent': "postmanruntime/7.39.0"}
req = requests.get(url=url, headers=headers)
同理,也可以将user-agent请求头设置为chrome浏览器:
headers = {'user-agent':"mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/58.0.3029.110 safari/537.3"}
该请求头告诉服务器,请求是由一个运行在windows 10上的64位版本的chrome 58浏览器发起的。
发表评论