如何使用python的urllib编码POST数据

时间:2013-06-26 13:55:22

标签: python django urllib http-error

我正在尝试使用客户端python脚本连接到我的Django服务器。现在我只是想连接到一个视图并检索HttpResponse。以下工作正常

import urllib2
import urllib

url = "http://localhost:8000/minion/serve"
request = urllib2.Request(url)
response = urllib2.urlopen(request)
html = response.read()
print html

但是,如果我将其更改为

import urllib2
import urllib

url = "http://localhost:8000/minion/serve"
values = {'name': 'Bob'}
data = urllib.urlencode(values)
request = urllib2.Request(url, data)
response = urllib2.urlopen(request)
html = response.read()
print html

我得到urllib2.HTTPError: HTTP Error 500: INTERNAL SERVER ERROR。我在这里做错了吗?以下是我尝试遵循的教程http://techmalt.com/?p=212 http://docs.python.org/2/howto/urllib2.html

编辑:根据That1Guy的建议尝试进行以下更改(其他行保持不变)

request =  urllib2.Request(url, data)
response = urllib2.urlopen(request, data)

返回与以前相同的错误消息。

编辑:如果我更改我正在查看的页面似乎有效,所以错误不在客户端脚本中。因此,根据这一启示,这是正在访问的服务器端视图:

def serve(request):
    return HttpResponse("You've been served!")

正如你所看到的,它非常直接。

编辑:经过测试,看看内部错误是否可能是由于缺少csrf令牌引起的,但是csrf_exempt装饰器无法解决错误。

1 个答案:

答案 0 :(得分:1)

终于弄明白了。 How to POST dictionary from python script to django url?

原来我的网址错过了一个尾随的斜线。这就是我猜你总能得到的小事。