2017-12-25 4 views
0

urllib.request.urlopen을 통해 ulr 상태를 얻으려고하고 어떤 경우에는 브라우저에서이 URL을 성공적으로 열 수있는 경우 urllib.error.URLError: HTTP Error 403: Forbidden을 반환합니다. 다른 lib를 사용하기 위해 urllib 이상으로이 문제를 극복 할 수 있습니까?urllib.error.URLError : HTTP 오류 403 : urllib.request.urlopen에서 금지되었습니다.

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 
+0

당신은 URL을 제공 할 수 있습니까? 그것 없이는 도움이 어렵습니다. 또한 질문을 업데이트하고 답변을 삭제하십시오. –

답변

0

requests를 사용 simler는 다음과 같습니다

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 
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 (파이썬 사용자들 사이에서 사실상의 표준 HTTP 라이브러리)을 사용하는 경우

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