使用带有参数的urllib2发送POST时的HTTPError

时间:2014-04-22 07:44:47

标签: python django post urllib2 urllib

我正在尝试使用以下代码发送带有一些参数的POST请求:

def _ws_save_manifest(self):
    url = 'http://localhost:8000/extras/save_manifest/'

    xml_string = 'example'
    params = {'xml_string': xml_string}
    data = urllib.urlencode(params)
    request = urllib2.Request(url, data)
    request.add_header('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5')
    request.add_header('Content-type', 'application/x-www-form-urlencoded')
    response = urllib2.urlopen(request)

    #response = urllib2.urlopen(url)
    result = json.load(response)
    if result['ok']:
        return True
    return False

但是我收到以下错误:

File "/usr/lib/python2.7/urllib2.py", line 528, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: FORBIDDEN

使用GET,我完全没有问题,但是在发送标题时会出现问题。

顺便说一下:请求是使用django而且是url(与GET完美配合):

url(r'^extras/save_manifest/$', 'extras.views.save_manifest'), 

1 个答案:

答案 0 :(得分:1)

问题是,使用django的POST请求是跨站点请求伪造保护。 请查看https://docs.djangoproject.com/en/dev/ref/contrib/csrf/以获取更多信息。