Как отправить значение HTTP POST на страницу (PHP) с помощью Python? - PullRequest
1 голос
/ 10 марта 2009

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

Ответы [ 6 ]

5 голосов
/ 10 марта 2009

Проверьте модули 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

3 голосов
/ 11 марта 2009

Я считаю 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 (), иначе запрос не будет выполнен.

3 голосов
/ 10 марта 2009

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

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

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

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

2 голосов
/ 10 марта 2009

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

1 голос
/ 03 января 2016

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

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

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

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

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

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

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

Имя: Смит. Имя: Аясаки. PW: 123456

.
0 голосов
/ 11 марта 2009

Просто дополнение к процедуре @ 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...