У меня есть страница PHP, которая имеет 1 текстовое поле и когда я нажимаю кнопку отправки. Мой SQL будет хранить это имя продукта в моей базе данных. Мой вопрос: можно ли отправить / опубликовать имя продукта, используя скрипт Python, который запрашивает значение 1, а затем использовать мою страницу PHP для отправки в мою базу данных? Благодаря!
Проверьте модули urllib и urllib2.
http://docs.python.org/library/urllib2.html
http://docs.python.org/library/urllib.html
Просто создайте объект Request с необходимыми данными. Затем прочитайте ответ от вашего PHP-сервиса.
При тестировании или автоматизации веб-сайтов с использованием 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()