【问题标题】:HTTPError: Moved Permanently raised by urllib2.urlopen()HTTPError:由 urllib2.urlopen() 永久引发的移动
【发布时间】:2019-06-12 21:58:50
【问题描述】:

我正在尝试使用 python 2.7 中的 urllib 和 urllib2 库向数据库发送补丁请求(因为我无法使用请求库,因为它在此服务器中不起作用并且没有人找到解决方案,所以请不要建议请求,因为该路径已经关闭)。

代码如下:

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 请求类会自动发送一个有 200 响应的 get 请求,所以我猜它与授权和凭据无关。使用 python 3 和 urllib.request 库也可以,因此服务器肯定会接受 PATCH 请求。

我希望任何人都能找到解决方案...我无法想象为什么会发生这种情况。

更新已解决:我发现问题与我提出请求的网址有关。

【问题讨论】:

    标签: python python-2.7 request


    【解决方案1】:

    “永久移动”错误表明服务器响应 HTTP 301 错误,这意味着您请求的 URL 已移动到另一个 URL (https://en.wikipedia.org/wiki/HTTP_301)。

    我建议使用 tcpdump 或 wireshark 等工具捕获网络流量,以检查 HTTP 对话并确认。如果服务器实际上是在回复 301 并且这不是 urllib 引发错误的错误代码,则服务器响应应该包含一个带有另一个 URL 的“Location”标头,您应该尝试这个。

    请注意urllib has problems when dealing with redirects.,因此您可能需要重新考虑尝试让“请求”模块工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 2017-12-10
      • 2013-01-27
      • 2015-06-25
      • 2012-07-12
      • 2019-11-04
      • 2017-07-04
      相关资源
      最近更新 更多