HTTP post with urllib2

MRAB python at mrabarnett.plus.com
Tue Aug 6 20:14:48 EDT 2013


On 06/08/2013 23:52, cerr wrote:
> Hi,
>
> Why does this code:
>
> #!/usr/bin/python
>
>
> import urllib2
> from binascii import hexlify, unhexlify
>
> host = "localhost"
> uri="/test.php"
> data ="\x48\x65\x6C\x6C\x6F\x57\x6F\x72\x6C\x64" #Hello World
> url="http://{0}{1}?f=test".format(host, uri)
> req = urllib2.Request(url, data,{'Content-Type': 'application/octet-stream'})
> req.get_method = lambda: 'PUT'
> response = urllib2.urlopen(req, 120)
> retval = response.read()
> print "RETVAL "+retval
>
>
>
> return me this:
>
> ./post.py
> Traceback (most recent call last):
>    File "./post.py", line 13, in <module>
>      response = urllib2.urlopen(req, 120)
>    File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
>      return _opener.open(url, data, timeout)
>    File "/usr/lib/python2.7/urllib2.py", line 398, in open
>      req = meth(req)
>    File "/usr/lib/python2.7/urllib2.py", line 1116, in do_request_
>      'Content-length', '%d' % len(data))
>
>
> I don't get it, what's going on here?
>
The docs say """urllib2.urlopen(url[, data][, timeout])""".

You're calling it as """urllib2.urlopen(req, 120)""".

In other words, 'url' is req and 'data' is 120.

It should be """urllib2.urlopen(req, None, 120)""".




More information about the Python-list mailing list