Ошибка сертификата SSL при выполнении запроса POST к внешнему серверу - PullRequest
1 голос
/ 18 марта 2020

Я пытаюсь отправить запрос на https://app.getswift.co/api/public/v2/deliveries, используя библиотеку запросов, и получаю следующую ошибку

HTTPSConnectionPool(host='app.getswift.co', port=443): Max retries exceeded with url: /api/public/v2/deliveries (Caused by SSLError(CertificateError("hostname 'app.getswift.co' doesn't match either of '*.my_domain.ai', 'another.my_domain.ai'),))

Это мой запрос.

headers = {
    'Content-Type': 'application/json',
}

data = {
    "apiKey": "my-api-key",
    "booking": {
        "pickupDetail": {
            "name": "Rupert 1",
            "phone": "1234567890",
            "address": "112 luscombe st, brunswick, melbourne"
        },
        "dropoffDetail": {
            "name": "Igor 2",
            "phone": "0987654321",
            "address": "105 collins st, 3000"
        }
    }
}
requests.post("https://app.getswift.co/api/public/v2/deliveries", headers=headers, json=data)

Я тестировал тот же код на своей локальной python оболочке и даже сделал запрос почтальона, он отлично работает. Проблема возникает, когда я пытаюсь набрать тот же код на сервере ec2 и сделать пост-запрос.

Я попытался с помощью verify=False проверить, работает ли он (хотя я знаю последствия для безопасности) но вместо этого я получаю "404 Not found". Это то, что я вижу в своих журналах ec2

Not Found: /api/public/v2/deliveries 

HTTP POST /api/public/v2/deliveries 404 [0.01, 127.0.0.1:57840] 
https://app.getswift.co:443 "POST /api/public/v2/deliveries HTTP/1.1" 404 None

Буду благодарен за любую помощь.

1 Ответ

1 голос
/ 18 марта 2020

Трудно сказать без доступа к конкретной странице, но не могли бы вы добавить другие заголовки, такие как User-Agent и cookies=cookies? Я думаю, что страница может проверять аутентификацию, а вы не проходите аутентификацию должным образом.

В противном случае может также оказаться, что сервер ec2 находится за прокси / vpn, как серверы AWS. В этом случае вы можете попытаться доверять среде.

s = requests.Session()
s.trust_env = False

response = s.get("https://app.getswift.co/api/public/v2/deliveries", headers=headers, json=data)

Если это не работает, то API может просто блокировать ваш сервер ec2. Попробуйте сделать другой ec2 в другом регионе или используйте другой VPS и посмотрите, работает ли он.

...