我在我的站点中创建了一个API,我试图从python调用一个API,但是我总是得到406作为响应,但是如果我将url与参数放在浏览器中,我可以看到正确的答案。
我已经在页面中做了一些测试,您可以在其中测试您自己的API,我在浏览器中测试它并正常工作。我已经跟进了一本手册,它解释了如何从python调用API,但是我没有得到正确的响应:
这是API的URL和params:clave=123
这是我用来从Python调用API的代码
import requests
urlLogin = "https://icassy.com/api/login.php"
params = {'usuario_email': 'warles34@gmail.com', 'usuario_clave': '123'}
r = requests.get(url=urlLogin, data=params)
print(r)
print(r.content)我得到了:
<Response [406]>
b'<head><title>Not Acceptable!</title></head><body><h1>Not Acceptable!</h1><p>An appropriate representation of the requested resource could not be found on this server. This error was generated by Mod_Security.</p></body></html>'我应该以JSON格式接收成功消息,并收到类似于此的每个like:
{“消息”:“成功登录”,"apikey":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9leGFtcGxlLm9yZyIsImF1ZCI6Imh0dHA6XC9cL2ljYXNzeS5jb20iLCJpYXQiOjEzNTY5OTk1MjQsIm5iZiI6MTM1NzAwMDAwMCwiZGF0YSI6eyJ1c3VhcmlvX2lkIjoiMzQiLCJ1c3VhcmlvX25vbWJyZSI6IkNhcmxvcyIsInVzdWFyaW9fYXBlbGxpZG8iOiJQZXJleiIsInVzdWFyaW9fZW1haWwiOiJ3YXJsZXMzNEBnbWFpbC5jb20ifX0.bOhrC-vXhQEHtbbZGmhLByCxvJY7YxDrLhVOfy9zeFc"}
发布于 2019-08-08 17:40:07
看起来服务器上有一个验证来检查请求是否是从某个浏览器发出的。添加一个用户代理头应该可以-
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'}
r = requests.get(url=urlLogin, params=params, headers=headers)用户代理的这链接将来可能会派上用场。
发布于 2021-08-19 12:25:46
我发现我所做的服务是托管在Akamai上的,它有一个bot管理器。它查看请求(它来自何处),如果它确定它是一个bot,则会得到一个406错误。
解决方案是要求将服务器IP白名单,或者向所有服务器通信发送一个特殊的报头。
https://stackoverflow.com/questions/57417799
复制相似问题