Уведомления

Группа в Telegram: @pythonsu

#1 Март 9, 2011 01:19:56

vatsik
От:
Зарегистрирован: 2011-01-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Как отправить json через http

Подскажите может есть какие-то библиотеки или способы…

Надо отправить json через http на веб-форму методом post



Отредактировано (Март 9, 2011 01:27:36)

Офлайн

#2 Март 9, 2011 08:51:52

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Как отправить json через http

Как ни странно, для работы с json есть библиотека, которая называется json :)
Начинаяс 2.6 она идет в комплекте с питоном, если у вас python<2.6 то необходимо установить любую другую библиотеку, например simplejson.
Далее просто отправляете сформированные данные, с помощью любой из подходящих библиотек, например, urllib.



Офлайн

#3 Март 9, 2011 11:34:22

vatsik
От:
Зарегистрирован: 2011-01-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Как отправить json через http

Data это словарь

следующий кусок кода:

jsonData = simplejson.dumps(Data)
sendData = urllib.encode(sjonData)
request = urllib2.urlopen('http://127.0.0.1:8000/add/',sendData)
out = request.read()
выдает:
TypeError: not a valid non-string sequence or mapping object
Что это за ошибка? И что я делаю не так???



Отредактировано (Март 9, 2011 11:38:37)

Офлайн

#4 Март 9, 2011 13:34:27

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Как отправить json через http

data = urllib.urlencode(python_dict)
request = urllib.urlopen('http://127.0.0.1:8000/add/', data)
out = request.read()



Офлайн

#5 Март 9, 2011 21:15:16

vatsik
От:
Зарегистрирован: 2011-01-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Как отправить json через http

Спасибо!!! Очень внятно объяснили….
Тогда где тут json????



Офлайн

#6 Март 9, 2011 22:42:42

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Как отправить json через http

vatsik
Что это за ошибка? И что я делаю не так???
Это у вас сломался:
sendData = urllib.encode(sjonData)
Вам нужен quote.

И потом не забудте в запрос добавить заголовок Content-Type c правильным значением.



Офлайн

#7 Март 9, 2011 22:46:02

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Как отправить json через http

vatsik
Спасибо!!! Очень внятно объяснили….
Тогда где тут json????
Немного не так все… У POST запросов есть поля, у которых должны быть значения. Вам нужно выяснить для начала, какое название поля должно быть у вашего запроса, и в значении этого поля уже должен содержаться json. Например, поле POST запроса должно называться data, тогда
import urllib
import json

# данные для json
jsondata={'hello':'world}
# дампим и преобразуем в объект, понятный urllib
post=urllib.urlencode({'data':json.dumps(jsondata)})
# и посылаем запрос
request=urllib.urlopen('http://url',post)



Офлайн

#8 Март 9, 2011 22:50:03

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Как отправить json через http

igor.kaist
У POST запросов есть поля, у которых должны быть значения.
Совсем не обязательн. Это справедливо для application/x-www-form-urlencoded



Офлайн

#9 Март 11, 2011 15:03:14

vatsik
От:
Зарегистрирован: 2011-01-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Как отправить json через http

Сделал все что тут написано но :

socket.error: Connection reset by peer

не могу даже Hello World отправить…

NEED HELP!!!!!!!!!!



Офлайн

#10 Март 11, 2011 22:37:07

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Как отправить json через http

А если так:

jsonData = simplejson.dumps(Data)
headers = {"Content-type": "application/json", "Accept": "application/json"}
conn = httplib.HTTPConnection("127.0.0.1:8000")
conn.request("POST", "/add", jsonData, headers)
response = conn.getresponse()
print response.status, response.reason
data = response.read()
conn.close()
Да, а что выступает в качестве сервера?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version