Chcę wykonać polecenie curl w Pythonie.
Zwykle wystarczy wpisać polecenie w terminalu i nacisnąć klawisz powrotu. Jednak nie wiem, jak to działa w Pythonie.
Polecenie pokazuje poniżej:
curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere
W celu uzyskania odpowiedzi należy wysłać plik request.json.
Szukałem dużo i pomyliłem się. Próbowałem napisać kawałek kodu, chociaż nie mogłem w pełni go zrozumieć. To nie zadziałało.
import pycurl
import StringIO
response = StringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL, 'https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere')
c.setopt(c.WRITEFUNCTION, response.write)
c.setopt(c.HTTPHEADER, ['Content-Type: application/json','Accept-Charset: UTF-8'])
c.setopt(c.POSTFIELDS, '@request.json')
c.perform()
c.close()
print response.getvalue()
response.close()
Komunikat o błędzie to „Błąd analizy”. Czy ktoś może mi powiedzieć, jak to naprawić? lub jak poprawnie uzyskać odpowiedź od serwera?
Odpowiedzi:
Dla uproszczenia może warto rozważyć użycie biblioteki Requests .
Przykład z treścią odpowiedzi json wyglądałby tak:
Jeśli szukasz dalszych informacji, w sekcji Szybki start zawierają one wiele praktycznych przykładów.
EDYTOWAĆ:
Dla twojego konkretnego tłumaczenia curl:
źródło
'Accept-Charset': 'UTF-8'
Requests
to dodatkowa zależność, którą musisz zainstalować i zarządzać. Aby zapoznać się z prostym rozwiązaniem wykorzystującym tylko standardową bibliotekę, zobacz stackoverflow.com/a/13921930/111995Po prostu skorzystaj z tej witryny . Konwertuje dowolne polecenie curl na Python, Node.js, PHP, R lub Go.
Przykład:
Staje się tym w Pythonie,
źródło
może?
jeśli próbujesz wysłać plik
ahh dzięki @LukasGraf teraz lepiej rozumiem, co robi jego oryginalny kod
źródło
requests.json
pliku i nie ustawiaContent-Type: application/json
nagłówka - również wyśleGET
żądanie, a nie plikPOST
.curl -d @<file>
odczyta pola do wysłania<file>
- to nie to samo, co przesłanie pliku.data = requests.get(url).json
powinny byćdata = requests.get(url).json()
jego implementacja w Pythonie wygląda jak
sprawdź ten link , pomoże to przekonwertować polecenie cURl na python, php i nodejs
źródło
Moja odpowiedź to WRT Python 2.6.2.
Przepraszam, że nie podałem wymaganych parametrów, bo to poufne.
źródło
Trochę tła: szukałem dokładnie tego pytania, ponieważ musiałem coś zrobić, aby pobrać zawartość, ale wszystko, co miałem, to stara wersja Pythona z niewystarczającą obsługą SSL. Jeśli korzystasz ze starszego MacBooka, wiesz, o czym mówię. W każdym razie
curl
działa dobrze z powłoki (podejrzewam, że ma podłączoną nowoczesną obsługę SSL), więc czasami chcesz to zrobić bez użyciarequests
luburllib2
.Możesz użyć
subprocess
modułu do wykonaniacurl
i uzyskania pobranej treści:subprocess
Moduł Pythona 3 zawiera również.run()
szereg przydatnych opcji. Zostawię to komuś, kto faktycznie używa Pythona 3, aby udzielił odpowiedzi.źródło
Można to osiągnąć dzięki opisanemu poniżej podejściu do kodu pseudo
Importuj żądania importu systemu operacyjnego Data = os.execute (curl URL) R = Data.json ()
źródło