urllib2:甚至在异常

时间:2015-10-11 20:14:40

标签: python python-2.7 urllib2 urllib

我向某个网址发送POST请求,然后此网址会根据200 OK请求中提供的参数抛出401 UnauthorizedPOST代码

除了返回代码之外,网站还会返回一个文本,这对错误特别有用,因此执行请求的人知道失败的原因。为此,我使用此代码:

#/usr/bin/env python

import urllib
import urllib2

url = 'https://site/request'
params = {
  'param1': 'value1',
  'param2': 'value2',
  ...
}

data = urllib.urlencode(params)
req = urllib2.Request(url, data)

try:
  response = urllib2.urlopen(req)
  the_page = response.read()
except urllib2.URLError as e:
  print e.code, e.reason  # Returns only 401 Unauthorized, not the text

请求成功后,我会收到200代码,我可以使用the_page变量获取消息。在这种情况下相当无用。

但是当它失败时,抛出URLError的行就是那个调用urlopen()的行,所以我无法抓取网络错误消息。

即使在URLError事件中,有没有办法获取消息?如果没有,是否有另一种方法可以执行POST请求并在出错时抓取Web内容?

在我的案例中,Python版本为2.7.6

由于

2 个答案:

答案 0 :(得分:2)

我建议使用请求库(使用var array = ["My variable","Something else"]; var lookup = "My variable"; var index = array.indexOf(lookup); alert(index);安装)

pip install requests

文档:http://docs.python-requests.org/en/latest/

答案 1 :(得分:1)

如果你遇到一个HTTPError-它是URLError的一个更具体的子类,我认为它会在401的情况下被引发 - 它可以被读作类文件对象,产生页面内容: