Как отправить значение HTTP POST на страницу (PHP) с помощью Python?

У меня есть страница PHP, которая имеет 1 текстовое поле и когда я нажимаю кнопку отправки. Мой SQL будет хранить это имя продукта в моей базе данных. Мой вопрос: можно ли отправить / опубликовать имя продукта, используя скрипт Python, который запрашивает значение 1, а затем использовать мою страницу PHP для отправки в мою базу данных? Благодаря!

Проверьте модули urllib и urllib2.

http://docs.python.org/library/urllib2.html

http://docs.python.org/library/urllib.html

Просто создайте объект Request с необходимыми данными. Затем прочитайте ответ от вашего PHP-сервиса.

http://docs.python.org/library/urllib2.html#urllib2.Request

При тестировании или автоматизации веб-сайтов с использованием python мне нравится использовать twill. Twill – это инструмент, который автоматически обрабатывает файлы cookie и может читать HTML-формы и отправлять их.

Например, если у вас была форма на веб-странице, вы могли бы использовать следующий код:

from twill import commands commands.go('http://example.com/create_product') commands.formvalue('formname', 'product', 'new value') commands.submit() 

Это будет загружать форму, заполнять значение и отправлять его.

Я нахожу http://www.voidspace.org.uk/python/articles/urllib2.shtml, чтобы быть хорошим источником информации о urllib2, который, вероятно, является лучшим инструментом для работы.

 import urllib import urllib2 url = 'http://www.someserver.com/cgi-bin/register.cgi' user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' values = {'name' : 'Michael Foord', 'location' : 'Northampton', 'language' : 'Python' } headers = { 'User-Agent' : user_agent } data = urllib.urlencode(values) req = urllib2.Request(url, data, headers) response = urllib2.urlopen(req) the_page = response.read() 

Кодирование фактически выполняется с помощью urllib, и это поддерживает HTTP POST. Существует также способ использования GET, где вы должны передавать данные в urlencode.

Не забудьте вызвать read (), хотя в противном случае запрос не будет завершен.

Да. urllib2 – хороший способ Python для создания / отправки HTTP-запросов.

Лично я предпочитаю использовать Запросы . Как сводка, это HTTP-библиотека для Python, построенная для людей .

Чтобы быстро решить проблемы, а не углубленно изучать HTTP, запросы будут лучшим выбором. (Да, я имею в виду по сравнению с urllib или socket )

Например, файл python, который отправляет запрос POST с пользовательскими данными:

 import requests userdata = {"firstname": "Smith", "lastname": "Ayasaki", "password": "123456"} resp = requests.post('http://example.com/test.php', data = userdata) 

И следующий text.php, рассматривающий этот запрос:

 $firstname = htmlspecialchars($_POST["firstname"]); $lastname = htmlspecialchars($_POST["lastname"]); $password = htmlspecialchars($_POST["password"]); echo "FIRSTNAME: $firstname LASTNAME: $lastname PW: $password"; 

Наконец, текст ответа (resp.content в python) будет выглядеть так:

FIRSTNAME: Smith LASTNAME: Ayasaki PW: 123456

Просто добавление к процедуре @antileet , оно работает аналогичным образом, если вы пытаетесь выполнить HTTP-запрос POST с полезной нагрузкой, подобной веб-сервису, за исключением того, что вы просто опускаете шаг urlencode; т.е.

 import urllib, urllib2 payload = """ <?xml version='1.0'?> <web_service_request> <short_order>Spam</short_order> <short_order>Eggs</short_order> </web_service_request> """.strip() query_string_values = {'test': 1} uri = 'http://example.com' # You can still encode values in the query string, even though # it's a POST request. Nice to have this when your payload is # a chunk of text. if query_string_values: uri = ''.join([uri, '/?', urllib.urlencode(query_string_values)]) req = urllib2.Request(uri, data=payload) assert req.get_method() == 'POST' response = urllib2.urlopen(req) print 'Response:', response.read()