Отправка POST-запроса в веб-сервис из python - PullRequest
3 голосов
/ 19 августа 2011

Я пытаюсь отправить запрос POST в спокойный веб-сервис.Мне нужно передать немного json в запросе. Это работает с командой curl ниже

curl --basic -i --data '<json data string here>' -H Content-type:"text/plain" -X POST http://www.test.com/api

Мне нужна помощь в создании вышеуказанного запроса от Python.Чтобы отправить этот POST-запрос от python, у меня есть следующий код:

import urllib
url='http://www.test.com/api'
params = urllib.urlencode... #What should be here ?
data = urllib.urlopen(url, params).read()

У меня есть три следующих вопроса:

  1. Это правильный способ отправки запроса?,
  2. Как указать значение параметров?
  3. Нужно ли указывать тип содержимого?

Пожалуйста, помогите Спасибо

Ответы [ 6 ]

2 голосов
/ 19 августа 2011

Документация для httplib содержит пример отправки почтового запроса.

>>> import httplib, urllib
>>> params = urllib.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})
>>> headers = {"Content-type": "application/x-www-form-urlencoded",
...            "Accept": "text/plain"}
>>> conn = httplib.HTTPConnection("bugs.python.org")
>>> conn.request("POST", "", params, headers)
>>> response = conn.getresponse()
>>> print response.status, response.reason
302 Found
>>> data = response.read()
>>> data
'Redirecting to <a href="http://bugs.python.org/issue12524">http://bugs.python.org/issue12524</a>'
>>> conn.close()
1 голос
/ 02 января 2012

Вам не нужно urllib.urlencode(), если Content-Type не application/x-www-form-urlencoded:

import json, urllib2

data = {"some": "json", "d": ["a", "ta"]}
req = urllib2.Request("http://www.test.com/api", data=json.dumps(data),
                      headers={"Content-Type": "application/json"})
print urllib2.urlopen(req).read()
1 голос
/ 02 января 2012

вопрос касается отправки параметров как "json" .. вам нужно установить Content-Type на application / json в заголовках, а затем отправлять параметры без urlencoding ..

например:

url = "someUrl"

data = { "data":"ur data"}


header = {"Content-Type":"application/json","User-Agent":"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"}

#lets use httplib2

import httplib2 
http = httplib2.Http()

response, send = http.request(url,"POST",headers=header,body=data)
1 голос
/ 19 августа 2011
  1. Создайте dict данных, которые вы хотите отправить как POST-запрос.
  2. urlencode диктат для получения строки.
  3. urlopen URL, который вы хотите, передавая необязательный параметр data в качестве закодированных данных POST.
0 голосов
/ 16 мая 2019
import requests

endpoint = 'https://xxxxxxxxxxxxxxxxxxx.com'
headers = {'Content-Type': 'text/plain'}
data = '{ id: 1 }'

result = requests.post(endpoint, headers=headers, data=data)
print(result)
0 голосов
/ 09 марта 2015

Вот пример фрагмента по запросу POST для json.Результаты будут напечатаны в вашем терминале.

import urllib, urllib2

url = 'http://www.test.com/api'
values = dict(data=json.dumps({"jsonkey2": "jsonvalue2", "jsonkey2": "jsonvalue2"}))
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
rsp = urllib2.urlopen(req)
content = rsp.read()

print content
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...