Jaki jest najszybszy sposób na HTTP GET w Pythonie, jeśli wiem, że zawartość będzie ciągiem? Przeszukuję dokumentację w celu znalezienia szybkiego linku, takiego jak:
contents = url.get("http://example.com/foo/bar")
Ale wszystko, co mogę znaleźć za pomocą Google są httplib
i urllib
- i jestem w stanie znaleźć skrót w tych bibliotekach.
Czy standardowy Python 2.5 ma skrót w jakiejś formie jak wyżej, czy powinienem napisać funkcję url_get
?
- Wolałbym nie wychwytywać wyniku ostrzału do
wget
lubcurl
.
python
http
networking
Frank Krueger
źródło
źródło
Odpowiedzi:
Python 3:
Python 2:
Dokumentacja dla
urllib.request
iread
.źródło
close
po ciebieread
. Czy to konieczne?read
. Alewith
blok byłby jaśniejszy i bezpieczniejszy dla Jython itp.requests
działa dobrzer = urllib2.urlopen("http://blah.com/blah")
wtedytext = r.read()
. Jest zsynchronizowany, po prostu czeka na wynik w „tekście”.Możesz użyć biblioteki o nazwie żądania .
To całkiem proste. Następnie możesz zrobić tak:
źródło
pip install
). W przypadku bibliotek nieczystych istnieje dodatkowy krok - musiszpip install
przenieść bibliotekę lib na instancję systemu AWS Linux (pod tą samą wersją systemu operacyjnego lambda), a następnie skopiować te pliki, aby uzyskać zgodność binarną z systemem AWS Linux. Jedynymi bibliotekami, których nie zawsze będziesz mógł używać w Lambda, są tylko biblioteki z dystrybucjami binarnymi, które na szczęście są dość rzadkie.pip install requests
.from botocore.vendored import requests
Sposób użyciaresponse = requests.get('...')
Jeśli chcesz, aby rozwiązanie z httplib2 było jednym narzędziem, zastanów się nad utworzeniem anonimowego obiektu HTTP
źródło
Spójrz na httplib2 , który - obok wielu bardzo przydatnych funkcji - zapewnia dokładnie to, czego chcesz.
Gdzie treść byłaby treścią odpowiedzi (jako ciąg), a resp zawierałaby nagłówki statusu i odpowiedzi.
Nie jest on dołączony do standardowej instalacji Pythona (ale wymaga tylko standardowego Pythona), ale zdecydowanie warto to sprawdzić.
źródło
Jest to dość proste dzięki potężnej
urllib3
bibliotece.Zaimportuj to w ten sposób:
I zrób taką prośbę:
Możesz także dodać nagłówki:
Więcej informacji można znaleźć w dokumentacji urllib3 .
urllib3
jest o wiele bezpieczniejsze i łatwiejsze w użyciu niż polecenie wbudowaneurllib.request
lubhttp
moduły i jest stabilny.źródło
rozwiązanie theller dla wget jest naprawdę przydatne, ale stwierdziłem, że nie drukuje postępu w trakcie pobierania. Jest to idealne, jeśli dodasz jeden wiersz po wyciągu drukowanym w raporcie zaczepu.
źródło
Oto skrypt wget w Pythonie:
źródło
Bez dalszych importów to rozwiązanie działa (dla mnie) - także z https:
Często mam problemy z pobieraniem treści, gdy nie podaje się „User-Agent” w informacjach nagłówka. Następnie zwykle żądania są anulowane za pomocą:
urllib2.HTTPError: HTTP Error 403: Forbidden
luburllib.error.HTTPError: HTTP Error 403: Forbidden
.źródło
Jak również wysyłać nagłówki
Python 3:
Python 2:
źródło
Jeśli pracujesz w szczególności z interfejsami API HTTP, istnieją również wygodniejsze opcje, takie jak Nap .
Oto na przykład, jak zdobyć informacje z Github od 1 maja 2014 r . :
Więcej przykładów: https://github.com/kimmobrunfeldt/nap#examples
źródło
Doskonałe rozwiązania Xuan, Theller.
Aby działał z Pythonem 3, wprowadź następujące zmiany
Ponadto podany adres URL powinien być poprzedzony „http: //”, w przeciwnym razie zwraca błąd nieznanego typu adresu URL.
źródło
Dla
python >= 3.6
, można użyć DLOAD :Dla
json
:Zainstalować:
pip install dload
źródło
Właściwie w pythonie możemy czytać z adresów URL jak z plików, oto przykład odczytu jsona z API.
źródło
Jeśli chcesz interfejsu API niższego poziomu:
źródło