Почему запросы не могут поддерживать сеанс, в то время как urllib3 успешно выполняется? - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть URL, на который мне нужно отправить запрос PUT. Однако перед тем, как сделать это, мне нужно сначала войти на другой URL-адрес, и мне нужно перенести jsessionid, чтобы иметь действительный сеанс. Я пытался сделать это с помощью пакета запросов, но безрезультатно, но с urllib3 это было успешно. Код на основе urllib3, который работает так:

import urllib3
import json

headers = {'Connection': 'keep-alive', 'Content-Type': 'application/json'}
login_info = {"username": "**user**", "password": "**password**"}
login_url = "login_url"
put_url = "put_url"
payload = {"property": "dummy_property", "Value": "123456"}

response = http.request("POST", login_url, headers=headers, body=json.dumps(login_info))
cookie = response.headers.get_all('set-cookie')
jsessionid = cookie[0].split(';')[0]
headers.update({'Cookie': jsessionid, 'user': login_info["username"]})
http = urllib3.PoolManager()
response = http.request("PUT", put_url, headers=headers, timeout=3000, body=json.dumps(payload))

С запросами я попробовал три приведенных ниже кода:

import requests
import json

headers = {'Connection': 'keep-alive', 'Content-Type': 'application/json'}
login_info = {"username": "**user**", "password": "**password**"}
login_url = "login_url"
put_url = "put_url"
payload = {"property": "dummy_property", "Value": "123456"}

with requests.Session() as session:
    post = session.post(login_url, data=json.dumps(login_info), headers=headers)
    response = session.put(put_url, payload)

Также:

import requests
import json

headers = {'Connection': 'keep-alive', 'Content-Type': 'application/json'}
login_info = {"username": "**user**", "password": "**password**"}
login_url = "login_url"
put_url = "put_url"
payload = {"property": "dummy_property", "Value": "123456"}

session = requests.Session()
post = session.post(login_url, data=json.dumps(login_info), headers=headers)
response = session.put(put_url, payload)

Также :

import requests
import json

headers = {'Connection': 'keep-alive', 'Content-Type': 'application/json'}
login_info = {"username": "**user**", "password": "**password**"}
login_url = "login_url"
put_url = "put_url"
payload = {"property": "dummy_property", "Value": "123456"}

response = requests.request("POST", login_url, headers=headers, data=json.dumps(login_info))
cookie = response.headers.get('set-cookie')
jsessionid = cookie[0].split(';')[0]
headers.update({'Cookie': jsessionid, 'user': login_info["username"]})
response = requests.request("PUT", put_url, headers=headers, data=json.dumps(payload))

Все попытки с запросами дают мне неверный сеанс, но тот, что с urllib3, выполняет работу успешно. Я проверил многие онлайн-ресурсы на предмет работы пакета запросов, и все утверждают, что хотя бы один из этих методов работал для них. Большинство используют первый. Но никто не работает на меня. Я что-то упустил?

...