HTTPError: перемещено Постоянно возбуждается функцией urllib2.urlopen () - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь отправить запрос на исправление базы данных с использованием библиотеки urllib и urllib2 в python 2.7 (поскольку я не могу использовать библиотеку запросов, потому что она не работает на этом сервере, и никто не нашел решения для этого, поэтому, пожалуйста, не предлагайте запросы, потому что этот путь уже закрыт).

Код выглядит так:

data={"name":"whatever name"}
data=urllib.urlencode(data,'utf-8')#Encoding the dictionary of the data to make the request
req=urllib2.Request(url=next_url,headers={"Authorization": auth_header,"Content-Type": "application/json"})#Creating a request object of urllib library
req.add_data=data
req.get_method = lambda: 'PATCH'
resp = urllib2.urlopen(req)

Если не назначить оба req.get_method=lambda: 'PATCH', req.add_data=data, класс запроса автоматически отправляет запрос get, который имеет ответ 200, так что я предполагаю, что это не имеет отношения к авторизации и учетным данным. Использование Python 3 и библиотеки urllib.request также работает, поэтому сервер обязательно принимает запросы PATCH.

Я надеюсь, что кто-нибудь может найти решение ... Я не могу представить, почему это происходит.

Обновление решено: я обнаружил, что проблема связана с URL-адресом, по которому я делал запрос.

1 Ответ

0 голосов
/ 18 января 2019

Ошибка «Перемещено навсегда» означает, что сервер ответил ошибкой HTTP 301, что означает, что запрашиваемый вами URL был перемещен на другой URL (https://en.wikipedia.org/wiki/HTTP_301).

Я бы предложил захватить сетевой трафик с помощью таких инструментов, как tcpdump или wireshark, чтобы проверить HTTP-диалог и подтвердить. Если сервер на самом деле отвечает 301, и это не означает, что urllib вызывает неправильный код ошибки, ответ сервера должен включать заголовок «Location» с другим URL, и вы должны попробовать его вместо этого.

Обратите внимание, что urllib имеет проблемы при работе с перенаправлениями. , поэтому вы можете пересмотреть попытку заставить модуль "запросы" работать вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...