我正在尝试使用以下代码发送带有一些参数的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'),
答案 0 :(得分:1)
问题是,使用django的POST请求是跨站点请求伪造保护。 请查看https://docs.djangoproject.com/en/dev/ref/contrib/csrf/以获取更多信息。