data = {
'ids': [12, 3, 4, 5, 6 , ...]
}
urllib2.urlopen("http://abc.com/api/posts/create",urllib.urlencode(data))
Quero enviar uma solicitação POST, mas um dos campos deve ser uma lista de números. Como eu posso fazer isso ? (JSON?)
Respostas:
Se o seu servidor espera que a solicitação POST seja json, você precisará adicionar um cabeçalho e também serializar os dados para sua solicitação ...
Python 2.x
Python 3.x
https://stackoverflow.com/a/26876308/496445
Se você não especificar o cabeçalho, ele será o
application/x-www-form-urlencoded
tipo padrão .fonte
add_header()
novamente, para cada cabeçalho que você deseja adicionar.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
eurllib.request.Request()
. Além disso, imprimir o objeto req não faz nada de interessante. Você pode ver claramente que os cabeçalhos foram adicionados ao imprimirreq.headers
. Além disso, não tenho certeza por que não está funcionando em seu aplicativo.Eu recomendo usar o
requests
módulo incrível .http://docs.python-requests.org/en/v0.10.7/user/quickstart/#custom-headers
fonte
TypeError: post() takes from 1 to 2 positional arguments but 3 were given
para python 3.4.2 descobri que o seguinte funcionará:
fonte
Isso funciona perfeitamente para
Python 3.5
, se o URL contiver valor de string / parâmetro de consulta,URL de solicitação = https://bah2.com/ws/rest/v1/concept/
Valor do parâmetro = 21f6bb43-98a1-419d-8f0c-8133669e40ca
fonte
Você precisa adicionar o cabeçalho ou obterá o erro http 400. O código funciona bem em python2.6, centos5.4
código:
fonte
Aqui está um exemplo de como usar o objeto urllib.request da biblioteca padrão do Python.
fonte
No último pacote de solicitações, você pode usar o
json
parâmetro norequests.post()
método para enviar um dict json, e oContent-Type
cabeçalho in será definido comoapplication/json
. Não há necessidade de especificar o cabeçalho explicitamente.fonte
Este funciona bem para mim com apis
fonte