POST-запрос с использованием urllib2 некорректно отправляет данные (ошибка 401) - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь сделать запрос POST в Python 2, используя urllib2.Мой код в настоящее время выглядит следующим образом:

url = 'http://' + server_url + '/playlists/upload?'
data = urllib.urlencode(OrderedDict([("sectionID", section_id), ("path", current_playlist), ("X-Plex-Token", plex_token)]))


req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
d = response.read()
print(d)

'url' и 'data' возвращаются правильно отформатированными с переменными, я знаю это, потому что я могу скопировать их вывод в Postman для проверки, и POST работает нормально (см.пример URL ниже)

http://192.168.1.96:32400/playlists/upload?sectionID=11&path=D%3A%5CMedia%5CPPP%5Ctmp%5Cplex%5CAmbient.m3u&X-Plex-Token=XXXXXXXXX

Когда я запускаю свой код Python, я получаю возвращенную ошибку 401, что, вероятно, означает, что параметр X-Plex-Token был отправлен неправильно, поэтому мне не разрешен доступ.

Может кто-нибудь сказать мне, где я иду не так?Помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Я закончил тем, что переключился на Python 3, так как я не понимал, что модуль запросов включен по умолчанию.До сих пор не знаю, почему вышеперечисленное не работает, но, возможно, что-то связано с отсутствием заголовковOrderedDict.

import requests

url = 'http://' + server_url + '/playlists/upload'
headers = {'cache-control': "no-cache"}
querystring = urllib.parse.urlencode(OrderedDict([("sectionID", section_id), ("path", current_playlist), ("X-Plex-Token", plex_token)]))

response = requests.request("POST", url, data = "", headers = headers, params = querystring)
print(response.text)
0 голосов
/ 19 марта 2019

Вы пытались удалить знак вопроса и не использовать OrderedDict (не знаю, зачем вам это нужно)?

url = 'http://' + server_url + '/playlists/upload'
data = urllib.urlencode({"sectionID":section_id), "path":current_playlist,"X-Plex-Token":plex_token})


req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
d = response.read()
print(d)

Конечно, вы все равно должны использовать запросы:

import requests
r = requests.post('http://{}/playlists/upload'.format(server_url), data = {"sectionID":section_id), "path":current_playlist,"X-Plex-Token":plex_token})
print r.url
print r.text
print r.json
...