Python URLLib/URLLib2 POST

Python URLLib/URLLib2 POST,python,post,urllib2,urllib,Python,Post,Urllib2,Urllib,我正在尝试使用wx/Python创建一个超级简单的虚拟输入/输出板。我已经为我向服务器发出的一个请求准备了以下代码,我将在其中存储数据: data = urllib.urlencode({'q': 'Status'}) u = urllib2.urlopen('http://myserver/inout-tracker', data) for line in u.readlines(): print line 那里没什么特别的事。我遇到的问题是,根据我读取文档的方式,这应该执行Post请求

我正在尝试使用wx/Python创建一个超级简单的虚拟输入/输出板。我已经为我向服务器发出的一个请求准备了以下代码,我将在其中存储数据:

data = urllib.urlencode({'q': 'Status'})
u = urllib2.urlopen('http://myserver/inout-tracker', data)
for line in u.readlines():
  print line
那里没什么特别的事。我遇到的问题是,根据我读取文档的方式,这应该执行Post请求,因为我提供了数据参数,但这并没有发生。我在该url的索引中有以下代码:

if (!isset($_POST['q'])) { die ('No action specified'); }
echo $_POST['q'];
每次运行Python应用程序时,我都会在控制台上打印“未指定操作”文本。我将尝试使用Request对象来实现它,因为我已经看到了一些包含这些对象的演示,但是我想知道是否有人可以帮助我解释为什么我没有用这些代码获得Post请求。谢谢

--编辑--

此代码确实有效,并可正确发布到我的网页:

data = urllib.urlencode({'q': 'Status'})
h = httplib.HTTPConnection('myserver:8080')
headers = {"Content-type": "application/x-www-form-urlencoded", 
           "Accept": "text/plain"}
h.request('POST', '/inout-tracker/index.php', data, headers)
r = h.getresponse()
print r.read()
当我提供数据参数时,我仍然不确定为什么urllib2库没有发布-文档表明它应该发布

u = urllib2.urlopen('http://myserver/inout-tracker', data)
h.request('POST', '/inout-tracker/index.php', data, headers)
使用路径
/inout tracker
而不使用尾随
/
不会获取
index.php
。相反,服务器将发出一个
302
重定向到带有尾部
/
的版本


执行302通常会导致客户端将POST转换为GET请求。

为什么不使用
urllib2
?我是<代码>urlib2.urlopen。我只使用urllib对post数据进行编码。这个答案非常完美!Python 2.6 urllib2模块确实从POST切换到重定向。这不仅发生在尾部正斜杠上,而且在http重定向到https的情况下也会发生。