использование post-запросов в python с параметрами с использованием модуля requests

#python

#python

Вопрос:

Я написал php-скрипт, который, по сути, принимает параметры из post-запросов и отправляет электронное письмо на основе этого. Я мог бы проще использовать python для отправки электронной почты, но этот проект не будет работать должным образом, если это будет сделано. Проблема не в php, поскольку я использовал его раньше с c , и все работает нормально. Проблема возникает при использовании python. Я знаю, что делаю что-то не так, и у меня есть хорошая идея о том, что это основано на исследованиях, но я не могу выяснить, как это исправить самостоятельно. Я понимаю, что мне нужно использовать словари с data = в «requests.post», но я не совсем уверен в том, как можно было бы пойти и сделать это. Вот пример кода.

 import requests

w=raw_input("type the email address to witch the message will be received.")
n=raw_input("name?")
s=raw_input("subject?")
m=raw_input("email message?")
if w=="" or n=="" or f=="" or m=="":
    print "Empty fields are not allowed. Now exiting."
else:
    r=requests.post("http://example.com/mailer.php?who=%samp;name=%samp;from=%samp;sub=%samp;mess=%s") % (w, n, f, s, m)
  

Комментарии:

1. Вам может потребоваться 5 минут, чтобы прочитать документ requests.

2. В вашем коде не объявлена переменная «f»…

Ответ №1:

Ввод ваших данных в URL в основном предназначен для запросов GET. Сервер может заметить это в POST-запросе, а может и не заметить. Попробуйте это вместо:

 r = requests.post("http://example.com/mailer.php", data={
    'who': w, 'name': n, 'from': f, 'sub': s, 'mess': m})
print(r.status_code, r.reason)
  

Ответ №2:

Попробуйте создать свой data словарь следующим образом:

 payload = {
    'who': w,
    'name': n,
    'from': f,
    'sub': s,
    'mess': m,
}

r = requests.post("http://example.com/mailer.php", data=payload)
  

Также обратите внимание, что:

 if not all((w, n, f, m)):
  

является ли более приятным эквивалентом:

 if w=="" or n=="" or f=="" or m=="":