Запрос с сервера возвращает HTTP 403, но запрос с локальной машины возвращает HTTP 200
Я столкнулся с тем, о чем говорится в заголовке. У меня есть сервер Ubuntu под управлением 20.04.5 LTS, на котором работает приложение Django. Я использую модуль requests
для отправки запросов API. Однако, когда бы я ни пытался выполнить запрос с сервера - либо из приложения, либо из отдельного Python-скрипта или даже cURL - я всегда получаю ответ 403 Forbidden.
Но если я запускаю ту же команду с локальной машины - cURL/Postman/script - я получаю ответ 200. Код requests
следующий
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, к которому я подключаюсь на производстве.
На данный момент мне кажется, что я перепробовал все - я даже выключил свой сервер и перезапустил все службы - и ничего не добился. Я буду благодарен, если кто-то сможет хотя бы указать мне направление, в котором я должен двигаться.
В моем коде нет никаких проблем. Я выяснил это после разговора с моим поставщиком.
Недавно поставщик начал геозонировать свои разрешенные запросы, и поскольку мой сервер физически расположен в другой стране, он автоматически блокировался.