40

I dont want to use html file, but only with django I have to make POST request.

Just like urllib2 sends a get request.

Chillar Anand
  • 27,936
  • 9
  • 119
  • 136
zjm1126
  • 34,604
  • 53
  • 121
  • 166

5 Answers5

45

Here's how you'd write the accepted answer's example using python-requests:

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

Much more intuitive. See the Quickstart for more simple examples.

Mustapha-Belkacim
  • 1,653
  • 1
  • 15
  • 19
Rick Mohr
  • 1,821
  • 1
  • 19
  • 22
37

In Python 2, a combination of methods from urllib2 and urllib will do the trick. Here is how I post data using the two:

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

urlopen() is a method you use for opening urls. urlencode() converts the arguments to percent-encoded string.

Flimm
  • 136,138
  • 45
  • 251
  • 267
gladysbixly
  • 2,591
  • 18
  • 15
8

The only thing you should look at now:

https://requests.readthedocs.io/en/master/

Mustapha-Belkacim
  • 1,653
  • 1
  • 15
  • 19
lajarre
  • 4,910
  • 6
  • 42
  • 69
5

You can use urllib2 in django. After all, it's still python. To send a POST with urllib2, you can send the data parameter (taken from here):

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

[..] the HTTP request will be a POST instead of a GET when the data parameter is provided

Community
  • 1
  • 1
Gabi Purcaru
  • 30,940
  • 9
  • 79
  • 95
2

Pay attention, that when you're using requests , and make POST request passing your dictionary in data parameter like this:

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

you are passing parameters form-encoded.

If you want to send POST request with only JSON (most popular type in server-server integration) you need to provide a str() in data parameter. In case with JSON, you need to import json lib and make like this:

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

documentation is here

OR: just use json parameter with provided data in the dict

payload = {'param1':1, 'param2':2}
r = request.post('https://domain.tld', json=payload)`
fanni
  • 1,149
  • 8
  • 11