我面临的问题和标题说的差不多。我有一个Ubuntu服务器,运行20.04.5 LTS,运行一个Django应用程序。我使用requests
模块发送API请求。然而,每当我尝试从服务器发送请求时-a无论是从应用程序还是单独的Python脚本,甚至是cURL --我总是得到403 Forbidden的响应。
但是,如果我从本地计算机运行相同的命令- cURL/Postman/script -我会得到一个200响应。
import requests
headers = {
'Content-Type': 'application/json',
}
body = {
/*Stuff related to authentication*/
}
token_url = 'https://example.com/token'
print("Attempting to get access token using the REQUESTS http module:")
response = requests.post(token_url, json=body, headers=headers)
print("Request Data:\n")
print(f"Request Headers: {response.request.headers}")
print(f"Response HTTP Status: {response.status_code}\nResponse body is {response.text}")
显然,example.com
并不是我试图达到的真正的端点。
服务器的相应输出为
Attempting to get access token using the REQUESTS http module:
Request Data:
Request Headers: {'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '226'}
Response HTTP Status: 403
Response body is
Response content b''
我一直面临这个问题,因为我更新了我的服务器约2-3天前. requests
突然停止工作,我不知道为什么.我没有代理安装在服务器上,我已经与API提供商确认,他们没有封锁我的服务器的域.
我已经改变了HTTP模块并使用了urllib3
,即使这样也不起作用。我已经在我的服务器上卸载并重新安装了“requests”,它仍然不起作用。
我试着通过查看cURL的详细输出来调试这个问题,但是没有任何异常。本地机器和服务器的cURL是相同的,直到它突然对服务器的请求给出403的响应部分。
我看到了this,但修复是针对托管在他们自己的本地计算机上的API,这与我连接到的生产强度API非常不同。
在这一点上,我觉得我已经尝试了一切-我甚至关闭了我的服务器,并重新启动所有服务-并没有任何进展。如果有人能告诉我,我会感激我该怎么做。
1条答案
按热度按时间mgdq6dx11#
我的代码没有任何问题。我和我的供应商谈过之后才弄明白。
供应商最近开始地理围栏他们允许的请求,因为我的服务器是物理上位于另一个国家,它被自动阻止。