2015-12-21 8 views
5

Używam modułu zapytań Pythona do wywoływania API. Wszystko działało dobrze, dopóki nie przekazałem mojego kodu do AWS. Nawet na AWS działa, jeśli pracuję na serwerze dev, czyli ec2.####.amazon.com:8000.Python Requests POST nie działa

Oto mój kod:

r = requests.post(api_url, data = {"var 1":"value", "var 2":"value"}) 

Moje API url niedozwolone GET metoda więc w odpowiedzi otrzymuję błąd, który GET metoda niedozwolone co oznacza requests.post jest brzmi get

jakiś pomysł co jest nie tak tutaj.

+0

Czy próbowałeś uzyskać dostęp do swojej reszty projekt bez portu 8000 (tryb produkcji env django), możesz również spróbować skomentować zapytanie request.method i sprawdzić, czy żądanie interfejsu API działa lub nie działa w ogóle. –

+0

@JatinBansal tak działa bez 8000 i tylko post daje błąd get działa poprawnie – user5594493

+0

Czy możesz wypróbować jednego z klientów REST do testowania żądań POST, jest ich wiele dostępnych, takich jak zaawansowany klient dla Google Chrome. Proszę również opublikować niektóre informacje o debugowaniu django, które pojawią się, gdy wystąpi błąd (ustaw debugowanie na True). –

Odpowiedz

3

Faktycznie problem był spowodowany SSL, jeśli serwer używa https metodę wtedy trzeba dodać następującą linię w requests.post

r = requests.post(api_url, data = {"var 1":"value", "var 2":"value"}, verify=True) 

także upewnić się, że api_url obejmuje https nie http

mam napisałem małą funkcję dla tego

def get_base_url(request): 
    host = get_host(request) 
    if request.is_secure(): 
     return '{0}{1}/{2}'.format('https://', host, 'url') 
    else: 
     return '{0}{1}/{2}'.format('http://', host, 'url')