简体   繁体   中英

How to set params in Python requests library

I have the following code using urllib in Python 2.7 and its working. I'm trying to do the same request using the requests library but I cant get it to work.

import urllib
import urllib2
import json

req = urllib2.Request(url='https://testone.limequery.com/index.php/admin/remotecontrol',\
                          data='{\"method\":\"get_session_key\",\"params\":[\"username\",\"password\"],\"id\":1}')
req.add_header('content-type', 'application/json')
req.add_header('connection', 'Keep-Alive')

f = urllib2.urlopen(req)
myretun = f.read()

j=json.loads(myretun)
print(j['result'])

Using requests library( Doesn't work)

import requests
import json

d= {"method":"get_session_key","params":["username","password"],"id":"1"}


headers = {'content-type' :'application/json','connection': 'Keep-Alive'}
req2 = requests.get(url='https://testone.limequery.com/index.php/admin/remotecontrol',data=d,headers=headers)

json_data = json.loads(req2.text)
print(json data['result']) 

I'm getting an error JSONDecodeError: Expecting value: line 1 column 1 (char 0) How can I make the code work with the requests library?

First, you're sending the wrong type of request. You're sending a GET request, but you need to send a POST, with requests.post .

Second, passing a dict as data will form-encode the data rather than JSON-encoding it. If you want to use JSON in your request body, use the json argument, not data :

requests.post(url=..., json=d)

Reference Link: http://docs.python-requests.org/en/master/api/

You can use requests module of python like so

import requests
Req = requests.request(
                        method     = "GET", # or "POST", "PUT", "DELETE", "PATCH" etcetera
                        url        = "http(s)://*", 
                        params     = {"key": "value"}, # IF GET Request  (Optional)
                        data       = {"key": "value"}, # IF POST Request (Optional)
                        headers    = {"header_name": "header_value"}    # (Optional)
)
print Req.content

You can surround the code with try::catch block like below to catch any exception thrown by requests module

try:
    # requests.request(** Arguments)
except requests.exceptions.RequestException as e:
    print e

For full argument list, please check reference link.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM