[Twisted-web] request.args empty when rendering PUT?

Jarek Zgoda jarek.zgoda at sensisoft.com
Wed Mar 28 06:24:00 CST 2007


L. Daniel Burr napisał(a):

>> I just discovered, that when using twisted.web and resource framework,
>> request.args are empty when I render the PUT method. Specifically, if I
>> issue http.request('PUT', path, params, headers) (http is
>> httplib.HTTPConnection object) and the params is urlencoded dictionary,
>> in the resource's render_PUT method I get request.args equal to {}. Is
>> this intended, or should I do something to enable passing data to PUT
>> method?
>>
> 
> I've never had a problem using PUT with twisted,web; I've had one such
> application running for over 2 years without a problem.
> 
> Could you please provide some more details, perhaps a snippet of how
> the client-code is calling your twisted.web server?  It is most likely
> something simple that is preventing your code from working as you desire.

The code that produces failure:

path = '/indexer'
headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'accept': 'text/plain',
}
docs = [{'field1': 'value1', 'field2': 'value2'}]
params = urllib.urlencode({'items': pickle.dumps(docs)})
http = httplib.HTTPConnection('localhost', 8080)
try:
    http.request('PUT', path, params, headers)
    response = http.getresponse()
    print response.reason
finally:
    http.close()

The dictionary I get as request.args is empty.

> Also, have you tried sending the PUT "by hand", i.e., using telnet to
> send the PUT line-by-line, or using curl, or some other client besides
> httplib?

Will try this.

-- 
Jarek Zgoda

"We read Knuth so you don't have to."



More information about the Twisted-web mailing list