小编cal*_*one的帖子

python 3.7 urllib.request 不遵循重定向 URL

我正在使用带有 urllib 的 Python 3.7。一切工作正常,但当它收到 http 重定向请求(307)时,它似乎没有自动重定向。

这是我得到的错误:

ERROR 2020-06-15 10:25:06,968 HTTP Error 307: Temporary Redirect
Run Code Online (Sandbox Code Playgroud)

我必须用 try- except 来处理它,并手动向新位置发送另一个请求:它工作正常,但我不喜欢它。

这些是我用来执行请求的代码片段:

      req = urllib.request.Request(url)
      req.add_header('Authorization', auth)
      req.add_header('Content-Type','application/json; charset=utf-8')
      req.data=jdati  
      self.logger.debug(req.headers)
      self.logger.info(req.data)
      resp = urllib.request.urlopen(req)
Run Code Online (Sandbox Code Playgroud)

url 是一个 https 资源,我设置了一个带有一些授权信息和内容类型的标头。req.data 是一个 JSON

从 urllib 文档中我了解到重定向是由库本身自动执行的,但它对我不起作用。它总是引发 http 307 错误并且不遵循重定向 URL。我还尝试使用指定默认重定向处理程序的开启器,但结果相同

  opener = urllib.request.build_opener(urllib.request.HTTPRedirectHandler)          
  req = urllib.request.Request(url)
  req.add_header('Authorization', auth)
  req.add_header('Content-Type','application/json; charset=utf-8')
  req.data=jdati  
  resp = opener.open(req)         
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?

python http urllib http-redirect http-status-code-307

3
推荐指数
1
解决办法
6155
查看次数