Mam pytanie. czy możliwe jest dodanie wielu elementów w nagłówku ... takich jak typ treści i identyfikator klienta ... @jdi
Omar Jandali
@OmarJandali, po prostu zadzwoń add_header()ponownie, dla każdego nagłówka, który chcesz dodać.
jdi,
Mam następujący kod, ale nic nie drukuje. miał wydrukować adres URL i nagłówki, ale nic nie zostało wydrukowane ... req = urllib.Request('http://uat-api.synapsefi.com') req.add_header('X-SP-GATEWAY', 'client_id_asdfeavea561va9685e1gre5ara|client_secret_4651av5sa1edgvawegv1a6we1v5a6s51gv') req.add_header('X-SP-USER-IP', '127.0.0.1') req.add_header('X-SP-USER', '| ge85a41v8e16v1a618gea164g65') req.add_header('Content-Type', 'application/json') print(req)...
Omar Jandali
urllib2 nie zostało rozpoznane, więc właśnie użyłem urllib. Otrzymuję również błąd dotyczący żądania. The view tab.views.profileSetup didn't return an HttpResponse object. It returned None instead. @jdi
Omar Jandali
@OmarJandali, pamiętaj, że ta odpowiedź została pierwotnie udzielona w 2012 roku pod pythonem 2.x. Używasz Python3, więc import będzie inny. Teraz będzie import urllib.requesti urllib.request.Request(). Ponadto wydrukowanie obiektu req nie robi nic interesującego. Możesz wyraźnie zobaczyć, że nagłówki zostały dodane przez drukowanie req.headers. Poza tym nie jestem pewien, dlaczego nie działa w Twojej aplikacji.
jdi,
114
Polecam skorzystanie z niesamowitego requestsmodułu.
W najnowszym pakiecie żądań możesz użyć jsonparametru w requests.post()metodzie, aby wysłać dict json, a Content-Typenagłówek in zostanie ustawiony na application/json. Nie ma potrzeby jawnego określania nagłówka.
Zauważ, że spowoduje to POSTed json z pojedynczymi cudzysłowami, co jest technicznie nieprawidłowe.
Jethro
@Jethro Czy zauważyłeś błędy podczas używania apostrofów? W Pythonie można używać pojedynczych cudzysłowów. Osobiście nie napotkałem żadnych problemów z tym związanych.
jdhao
Ach przepraszam, pomyliłem się, myślałem, że mój serwer otrzymuje pojedyncze cudzysłowy JSON, ale okazało się, że to osobny problem i pewne wprowadzające w błąd debugowanie. Pozdrawiam, to znacznie prostsze rozwiązanie niż ręczne określanie nagłówka!
Jethro
0
Ten działa dobrze dla mnie z apis
import requests
data={'Id':id ,'name': name}
r = requests.post( url ='https://apiurllink', data = data)
Odpowiedzi:
Jeśli twój serwer oczekuje, że żądanie POST będzie json, musisz dodać nagłówek, a także serializować dane dla żądania ...
Python 2.x
Python 3.x
https://stackoverflow.com/a/26876308/496445
Jeśli nie określisz nagłówka, będzie to
application/x-www-form-urlencoded
typ domyślny .źródło
add_header()
ponownie, dla każdego nagłówka, który chcesz dodać.req = urllib.Request('http://uat-api.synapsefi.com') req.add_header('X-SP-GATEWAY', 'client_id_asdfeavea561va9685e1gre5ara|client_secret_4651av5sa1edgvawegv1a6we1v5a6s51gv') req.add_header('X-SP-USER-IP', '127.0.0.1') req.add_header('X-SP-USER', '| ge85a41v8e16v1a618gea164g65') req.add_header('Content-Type', 'application/json') print(req)
...The view tab.views.profileSetup didn't return an HttpResponse object. It returned None instead.
@jdiimport urllib.request
iurllib.request.Request()
. Ponadto wydrukowanie obiektu req nie robi nic interesującego. Możesz wyraźnie zobaczyć, że nagłówki zostały dodane przez drukowaniereq.headers
. Poza tym nie jestem pewien, dlaczego nie działa w Twojej aplikacji.Polecam skorzystanie z niesamowitego
requests
modułu.http://docs.python-requests.org/en/v0.10.7/user/quickstart/#custom-headers
źródło
TypeError: post() takes from 1 to 2 positional arguments but 3 were given
dla pythona 3.4.2 stwierdziłem, że będzie działać:
źródło
Działa to idealnie w przypadku
Python 3.5
, gdy adres URL zawiera ciąg zapytania / wartość parametru,URL żądania = https://bah2.com/ws/rest/v1/concept/
Wartość parametru = 21f6bb43-98a1-419d-8f0c-8133669e40ca
źródło
Musisz dodać nagłówek lub otrzymasz błąd http 400. Kod działa dobrze na python2.6, centos5.4
kod:
źródło
Oto przykład użycia obiektu urllib.request ze standardowej biblioteki Pythona.
źródło
W najnowszym pakiecie żądań możesz użyć
json
parametru wrequests.post()
metodzie, aby wysłać dict json, aContent-Type
nagłówek in zostanie ustawiony naapplication/json
. Nie ma potrzeby jawnego określania nagłówka.źródło
Ten działa dobrze dla mnie z apis
źródło