Как установить параметры в библиотеке запросов Python - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть следующий код, использующий urllib в Python 2.7 и его работающий.Я пытаюсь выполнить тот же запрос с помощью библиотеки запросов, но не могу заставить его работать.

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'])

Использование библиотеки запросов (не работает)

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 'получаю ошибку JSONDecodeError: Expecting value: line 1 column 1 (char 0) Как заставить код работать с библиотекой запросов?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Сначала вы отправляете неправильный тип запроса.Вы отправляете запрос GET, но вам нужно отправить POST с requests.post.

Во-вторых, передача dict как data будет кодировать данные, а не кодировать их в JSON.Если вы хотите использовать JSON в теле запроса, используйте аргумент json, а не data:

requests.post(url=..., json=d)
0 голосов
/ 19 сентября 2018

Ссылка: http://docs.python -requests.org / ru / master / api /

Вы можете использовать модуль запросов Python, например:

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

Вы можете заключить код в блок try :: catch, как показано ниже, чтобы перехватить любое исключение, выданное модулем запросов

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

Полный список аргументов см. В справочной ссылке.

...