我有一个PHP页面,其中有1个文本框,当我按下提交按钮时。我的SQL将把这个产品名称存储到我的数据库中。我的问题是;是否可以使用Python脚本发送/发布产品名称,该脚本要求1个值,然后使用我的PHP页面将其发送到我的数据库?谢谢!
答案 0 :(得分:5)
查看urllib和urllib2模块。
http://docs.python.org/library/urllib2.html
http://docs.python.org/library/urllib.html
只需使用所需数据创建一个Request对象。然后从PHP服务中读取响应。
答案 1 :(得分:3)
在测试或使用python自动化网站时,我喜欢使用斜纹。 Twill是一种自动处理cookie的工具,可以读取HTML表单并提交。
例如,如果您在网页上有表格,可以想象使用以下代码:
from twill import commands
commands.go('http://example.com/create_product')
commands.formvalue('formname', 'product', 'new value')
commands.submit()
这会加载表单,填写值并提交。
答案 2 :(得分:3)
我发现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 :(得分:2)
是。 urllib2是一种很好的Python方式来形成/发送HTTP请求。
答案 4 :(得分:1)
我个人更喜欢使用请求。作为总结,这是一个用于Python的 HTTP库,为人类构建。
要快速解决问题,而不是深入研究HTTP,请求将是更好的选择。 (是的,我的意思是与 urllib 或 socket 相比)
例如, 一个python文件,用userdata发送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";
最后,响应文本(python中的resp.content)将如下:
FIRSTNAME:Smith LASTNAME:Ayasaki PW:123456
答案 5 :(得分:0)
只是@antileet程序的附录,如果您尝试使用类似Web服务的有效负载执行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()