Muszę przesłać niektóre dane na serwer za pomocą HTTP PUT
w pythonie. Z mojej krótkiej lektury dokumentów urllib2 robi to tylko HTTP POST
. Czy jest jakiś sposób na wykonanie HTTP PUT
w Pythonie?
220
W przeszłości korzystałem z różnych bibliotek pythonowych bibliotek HTTP i zdecydowałem się na ' Requests ' jako moje ulubione. Istniejące biblioteki lib miały całkiem użyteczne interfejsy, ale kod może skończyć się o kilka wierszy za długi na proste operacje. Podstawowy PUT w żądaniach wygląda następująco:
payload = {'username': 'bob', 'email': '[email protected]'}
>>> r = requests.put("http://somedomain.org/endpoint", data=payload)
Następnie możesz sprawdzić kod statusu odpowiedzi za pomocą:
r.status_code
lub odpowiedź z:
r.content
Żądania zawierają wiele synaktycznych cukrów i skrótów, które ułatwią ci życie.
json=payload
parametru, jeśli chcesz, aby dane były w ciele.źródło
requests
Zamiast tego rozważ użycie biblioteki.Httplib wydaje się czystszym wyborem.
źródło
Powinieneś rzucić okiem na moduł httplib . Powinno to pozwolić ci na wykonanie dowolnego żądania HTTP.
źródło
Musiałem też rozwiązać ten problem jakiś czas temu, aby móc działać jako klient interfejsu API RESTful. Ustawiłem na httplib2, ponieważ pozwoliło mi to wysłać PUT i DELETE oprócz GET i POST. Httplib2 nie jest częścią standardowej biblioteki, ale można go łatwo uzyskać w sklepie z serami.
źródło
Możesz użyć biblioteki żądań, to znacznie upraszcza sprawę w porównaniu z podejściem urllib2. Najpierw zainstaluj z pip:
Więcej informacji o instalowaniu żądań .
Następnie skonfiguruj żądanie sprzedaży:
Zobacz bibliotekę szybkiego startu dla żądań . Myślę, że jest to o wiele prostsze niż urllib2, ale wymaga zainstalowania i zaimportowania tego dodatkowego pakietu.
źródło
Zostało to poprawione w Python3 i udokumentowane w dokumentacji stdlib
urllib.request.Request
Klasa zyskałmethod=...
parametr w python3.Niektóre przykładowe użycie:
źródło
Polecam również httplib2 autorstwa Joe Gregario. Używam tego regularnie zamiast httplib w standardowej bibliotece.
źródło
Czy rzuciłeś okiem na put.py ? Używałem tego w przeszłości. Możesz też po prostu zhakować swoją własną prośbę za pomocą urllib.
źródło
Możesz oczywiście tworzyć własne z istniejącymi standardowymi bibliotekami na dowolnym poziomie, od gniazd po ulepszanie urllib.
http://pycurl.sourceforge.net/
„PyCurl to interfejs Pythona do libcurl.”
„libcurl to darmowa i łatwa w użyciu biblioteka do przesyłania adresów URL po stronie klienta, ... obsługuje ... HTTP PUT”
„Główną wadą PycURL jest to, że jest względnie cienką warstwą w stosunku do libcurl bez żadnej z tych ładnych hierarchii klas Pythona. Oznacza to, że ma dość stromą krzywą uczenia się, chyba że znasz już interfejs API C libcurl.”
źródło
Jeśli chcesz pozostać w standardowej bibliotece, możesz podklasować
urllib2.Request
:źródło
Bardziej właściwym sposobem na zrobienie tego
requests
byłoby:Rodzi to wyjątek, jeśli wystąpi błąd w żądaniu HTTP PUT.
źródło