data = {
'ids': [12, 3, 4, 5, 6 , ...]
}
urllib2.urlopen("http://abc.com/api/posts/create",urllib.urlencode(data))
Je souhaite envoyer une demande POST, mais l'un des champs doit être une liste de nombres. Comment puis je faire ça ? (JSON?)
Réponses:
Si votre serveur s'attend à ce que la requête POST soit json, vous devrez alors ajouter un en-tête et sérialiser les données de votre requête ...
Python 2.x
Python 3.x
https://stackoverflow.com/a/26876308/496445
Si vous ne spécifiez pas l'en-tête, ce sera le
application/x-www-form-urlencoded
type par défaut .la source
add_header()
nouveau, pour chaque en-tête que vous souhaitez ajouter.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
eturllib.request.Request()
. De plus, l'impression de l'objet req n'a rien d'intéressant. Vous pouvez clairement voir que les en-têtes ont été ajoutés en imprimantreq.headers
. Au-delà de cela, je ne sais pas pourquoi cela ne fonctionne pas dans votre application.Je recommande d'utiliser l'incroyable
requests
module .http://docs.python-requests.org/en/v0.10.7/user/quickstart/#custom-headers
la source
TypeError: post() takes from 1 to 2 positional arguments but 3 were given
pour python 3.4.2 j'ai trouvé que ce qui suit fonctionnera:
la source
Cela fonctionne parfaitement pour
Python 3.5
, si l'URL contient une valeur de chaîne de requête / paramètre,URL de la requête = https://bah2.com/ws/rest/v1/concept/
Valeur du paramètre = 21f6bb43-98a1-419d-8f0c-8133669e40ca
la source
Vous devez ajouter un en-tête, ou vous obtiendrez une erreur http 400. Le code fonctionne bien sur python2.6, centos5.4
code:
la source
Voici un exemple d'utilisation de l'objet urllib.request de la bibliothèque standard Python.
la source
Dans le dernier package de requêtes, vous pouvez utiliser le
json
paramètre dans larequests.post()
méthode pour envoyer un dict json, et l'Content-Type
en-tête in sera défini surapplication/json
. Il n'est pas nécessaire de spécifier explicitement l'en-tête.la source
Celui-ci fonctionne bien pour moi avec apis
la source