Python URLLib/URLLib2 POST

g.d*_*d.c 37 python post urllib urllib2

我正在尝试使用wx/Python创建一个超级简单的虚拟输入/输出板.对于我将要存储数据的服务器的一个请求,我有以下代码:

data = urllib.urlencode({'q': 'Status'})
u = urllib2.urlopen('http://myserver/inout-tracker', data)
for line in u.readlines():
  print line
Run Code Online (Sandbox Code Playgroud)

没有什么特别的东西在那里.我遇到的问题是,根据我阅读文档的方式,这应该执行一个Post Request,因为我提供了数据参数而且没有发生.我在该URL的索引中有此代码:

if (!isset($_POST['q'])) { die ('No action specified'); }
echo $_POST['q'];
Run Code Online (Sandbox Code Playgroud)

每次我运行我的Python应用程序时,都会在控制台上打印"未指定操作"文本.我将尝试使用请求对象来实现它,因为我已经看到了一些包含这些的演示,但我想知道是否有人可以帮助我解释为什么我没有获得带有此代码的Post Request.谢谢!

- 已编辑 -

此代码可以正常工作并正确发布到我的网页:

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()
Run Code Online (Sandbox Code Playgroud)

我仍然不确定为什么urllib2库在我提供数据参数时不发布 - 对我来说文档表明它应该.

bob*_*nce 47

u = urllib2.urlopen('http://myserver/inout-tracker', data)
h.request('POST', '/inout-tracker/index.php', data, headers)
Run Code Online (Sandbox Code Playgroud)

使用/inout-tracker没有尾随的路径/不会获取index.php.相反,服务器将向302具有尾随的版本发出重定向/.

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

  • 这个答案很完美!Python 2.6 urllib2模块在重定向上确实从POST切换到GET.这不仅发生在正斜杠上,而且在http重定向到https的情况下也会发生. (7认同)