如何使用django发送POST请求?

时间:2011-03-15 06:02:43

标签: python django urllib2

我不想使用html文件,但只有django我必须发出POST请求。

就像urllib2发送get请求一样。

5 个答案:

答案 0 :(得分:31)

urllib2和urllib的方法组合可以解决问题。以下是我使用二者发布数据的方法:

post_data = [('name','Gladys'),]     # a sequence of two element tuples
result = urllib2.urlopen('http://example.com', urllib.urlencode(post_data))
content = result.read()

urlopen()是一种用于打开网址的方法。 urlencode()将参数转换为百分比编码的字符串。

答案 1 :(得分:30)

以下是您如何使用python-requests撰写接受的答案的示例:

post_data = {'name': 'Gladys'}
response = requests.post('http://example.com', data=post_data)
content = response.content

更直观。有关更简单的示例,请参阅Quickstart

答案 2 :(得分:6)

你现在唯一应该看的是:

http://docs.python-requests.org/en/latest/

答案 3 :(得分:4)

可以在django中使用urllib2。毕竟,它仍然是python。要使用POST发送urllib2,您可以发送data参数(取自here):

  

urllib2.urlopen(url [,data] [,timeout])

     

[..]当提供数据参数时,HTTP请求将是POST而不是GET

答案 4 :(得分:0)

请注意,当您使用requests时,并发出POST请求,将字典通过data参数传递,如下所示:

payload = {'param1':1, 'param2':2}
r = request.post('https://domain.tld', data=payload)

您正在传递参数form-encoded

如果要仅使用JSON(服务器-服务器集成中最流行的类型)发送POST请求,则需要在str()参数中提供data。如果是JSON,则需要import json lib并进行如下修改:

 payload = {'param1':1, 'param2':2}
 r = request.post('https://domain.tld', data=json.dumps(payload))`

文档is here