Уведомления

Группа в Telegram: @pythonsu

#1 Июль 21, 2017 13:38:38

Denny_Colt
Зарегистрирован: 2017-07-19
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Как правильно составить POST запрос на Python?

Дело вообщем простое, нужно отправить пост запрос
Вот что получается:
Имя: My name
Email: myemail@mail.ru
Тема: Theme
Текст: Text message

Отправляется что то вроде этого:

{“activityDetails”:{“additionalInfoUrl”:null,“summary”:“<strong>Theme </strong><br>Text message”},“activityInfo”:{“fields”:},“activityLocationUrl”:"http://mnemonlk132.wixsite.com/mysite“,”activityType“:”contact/contact-form“,”contactUpdate“:{”name“:{”first“:”My“,”last“:”name“},”emails":},“createdAt”:“2017-07-19T13:48:14.361Z”}

Пытаюсь сделать так:
 import requests
s = requests.Session()
r = requests.post('http://mnemonlk132.wixsite.com/mysite', data = {'name':'My name', 'email':'Myemail@mail.ru', 'subject':'Test', 'message':'Text message'})

Но не отправляется.
Кто может помочь составить грамотный запрос?

Мне тут посоветовали вот что:
1. У вас в коде создается сессия, но не используется дальше. Открывайте сессию, делайте GET заглавной страницы и только потом POST.
2. POST-запрос там уходит по другому адресу
3. JSON нужно повторить так, как он отправляется в браузере
Но я как чайник чую не разберусь сам

Офлайн

#2 Июль 21, 2017 14:11:59

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Как правильно составить POST запрос на Python?

В data нужно подать строку, в которой json-данные

  
>>> import json
>>> 
>>> s = json.dumps({'a': 'b', 'c': 'd'})
>>> s
'{"a": "b", "c": "d"}'
>>>



Офлайн

#3 Июль 21, 2017 16:02:40

Denny_Colt
Зарегистрирован: 2017-07-19
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Как правильно составить POST запрос на Python?

py.user.next
В data нужно подать строку, в которой json-данные
О, спасибо, о импроте json я как то и не думал (или не знал вообще )
Насколько я понял, в данном случае должно быть примерно так?
 url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload))
Если да, то в payload следует записывать id формы ‘field1’='My name', или значения json ‘name’:'My name'?

Отредактировано Denny_Colt (Июль 21, 2017 16:03:19)

Офлайн

#4 Июль 21, 2017 19:37:41

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Как правильно составить POST запрос на Python?

вообще можно сразу передать json=payload



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Июль 22, 2017 00:36:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Как правильно составить POST запрос на Python?

Denny_Colt
Насколько я понял, в данном случае должно быть примерно так?
Примерно так, только надо все эти данные сформировать внутри функции, которая возвращает строку, готовую к отправке. А json там внутри или не json, requests не должен знать - просто строка какая-то.

JOHN_16
вообще можно сразу передать json=payload
Сегодня там json, завтра там не json, лучше абстрагировать до просто строки.



Офлайн

#6 Июль 22, 2017 23:32:27

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Как правильно составить POST запрос на Python?

py.user.next
Сегодня там json, завтра там не json, лучше абстрагировать до просто строки.
нууу а если там данные не конвертируемые в json - то какая разница? упадет в любом случае



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Июль 23, 2017 00:40:56

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Как правильно составить POST запрос на Python?

JOHN_16
нууу а если там данные не конвертируемые в json - то какая разница? упадет в любом случае
Тут речь про строку запроса. Если там неправильные данные, то выпадет функция, которая формирует строку для запроса, а не сам запрос. Запрос просто передаёт строку; он не знает, что в ней, его задача - передать какие-то данные определённым способом (в этом его ответственность, он отвечает за способ передачи). При любых изменениях мы его один раз написали и больше не трогаем.
А вот если туда подаётся параметр json, то при изменении данных на xml, например, мы должны лезть в этот запрос и всё равно приводить его к абстрактному виду (абстрагировать от формата данных). Это не его задача, заморачиваться с форматом данных. Он не должен ни формировать данные, ни разбирать их потом, он должен только послать их определённым способом и получить ответ на это. Вся программа строится из таких кусков, где каждый кусок отвечает только за небольшую часть поведения. После этого они соединяются в систему и образуют надёжное поведение в целом.

Если на примере дорожных рабочих приводить: вот должен асфальтоукладчик разбираться в механизме катка? Вроде он работает на катке, но должен ли он знать, где какая втулка или как там двигатель поршни двигает? Он должен только направить его, в этом его функция во всей этой системе, это его ответственность - “каток проезжает ровно”. А механизмом будет механик заниматься, и он не знает, как там асфальт класть, какие виды асфальта бывают и прочее. Ну и книжки они читают разные, каждый по своей специфике.



Отредактировано py.user.next (Июль 23, 2017 00:49:40)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version