Найти - Пользователи
Полная версия: Как правильно составить POST запрос на Python?
Начало » Python для новичков » Как правильно составить POST запрос на Python?
1
Denny_Colt
Дело вообщем простое, нужно отправить пост запрос
Вот что получается:
Имя: 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 нужно повторить так, как он отправляется в браузере
Но я как чайник чую не разберусь сам
py.user.next
В data нужно подать строку, в которой json-данные
  
>>> import json
>>> 
>>> s = json.dumps({'a': 'b', 'c': 'd'})
>>> s
'{"a": "b", "c": "d"}'
>>>
Denny_Colt
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'?
JOHN_16
вообще можно сразу передать json=payload
py.user.next
Denny_Colt
Насколько я понял, в данном случае должно быть примерно так?
Примерно так, только надо все эти данные сформировать внутри функции, которая возвращает строку, готовую к отправке. А json там внутри или не json, requests не должен знать - просто строка какая-то.

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

Если на примере дорожных рабочих приводить: вот должен асфальтоукладчик разбираться в механизме катка? Вроде он работает на катке, но должен ли он знать, где какая втулка или как там двигатель поршни двигает? Он должен только направить его, в этом его функция во всей этой системе, это его ответственность - “каток проезжает ровно”. А механизмом будет механик заниматься, и он не знает, как там асфальт класть, какие виды асфальта бывают и прочее. Ну и книжки они читают разные, каждый по своей специфике.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB