У меня есть 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, выполняет работу успешно. Я проверил многие онлайн-ресурсы на предмет работы пакета запросов, и все утверждают, что хотя бы один из этих методов работал для них. Большинство используют первый. Но никто не работает на меня. Я что-то упустил?