【问题标题】:urllib.error.URLError: HTTP Error 403: Forbidden from urllib.request.urlopenurllib.error.URLError:HTTP 错误 403:禁止来自 urllib.request.urlopen
【发布时间】:2017-12-25 10:37:07
【问题描述】:

我正在尝试通过 urllib.request.urlopen 获取 ulr 状态,在某些情况下它返回 urllib.error.URLError: HTTP Error 403: Forbidden 但是我可以成功地从浏览器打开此 url。 是否可以使用urllib 或更好地使用其他库来解决此问题?

def urllib_status(url):
    REQUEST_TIMEOUT = 10

    if 'http' not in url:
        url = 'http://' + url

    try:
        response = urllib.request.urlopen(url, timeout=REQUEST_TIMEOUT)
        return response.status
    except urllib.error.URLError as e:
        print('url:'+url)
        print('urllib.error.URLError:', e)
        return -1
    except ssl.SSLError as e:
        print('url:'+url)
        print('ssl.SSLError:', e)
        return -1
    except socket.error as e:
        print('url:'+url)
        print("socket.error: ", e)
        return -1

【问题讨论】:

  • 可以提供网址吗?没有它很难提供帮助。另请更新您的问题并删除您的答案。

标签: python-3.x url web urllib


【解决方案1】:

问题可能是由于该网站不接受非浏览器请求。您可以通过覆盖请求中的 User-Agent 标头来解决此问题(默认为 Python-urllib/3.X)。

来自Python docs

 import urllib.request
 opener = urllib.request.build_opener()
 opener.addheaders = [('User-agent', 'Mozilla/5.0')]
 opener.open('http://www.example.com/')

或者,如果您使用的是requests(Python 用户事实上的标准 HTTP 库)

import requests
requests.get('http://www.example.com/', headers={'User-agent': 'Mozilla/5.0'})

【讨论】:

    【解决方案2】:

    使用requests 更简单:

    def url_status(url):
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0)'
                                 ' Gecko/20100101 Firefox/24.0'}
        REQUEST_TIMEOUT = 10
    
        if 'http' not in url:
            url = 'http://' + url
        try:
            response = requests.get(url, headers=headers, timeout=REQUEST_TIMEOUT)
            if(response.status_code != 200):
                print(url)
                print('status',response.status_code)
            return response.status_code
        except Exception as e:
            print(url)
            print('Error',e)
            return -1
    

    【讨论】:

      猜你喜欢
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多