파충류 원리와 데이터 캡처 7: URlerror 및 HTTPError

6941 단어

urllib2의 이상 오류 처리

  • 우리는urlopen이나opener를 사용한다.오픈 방법이 요청을 보낼 때 urlopen이나opener.open에서 이response를 처리할 수 없어서 오류가 발생했습니다.
  • 여기서 주로 URLError와 HTTPError, 그리고 그것들에 대한 오류 처리를 말한다.

  • URLError

  • URLError가 발생하는 원인은 다음과 같습니다.
  • 네트워크 연결 없음
  • 서버 접속 실패
  • 지정된 서버를 찾을 수 없음
  • 우리는tryexcept문구로 상응하는 이상을 포착할 수 있다.다음 예에서 우리는 존재하지 않는 도메인 이름을 방문했다.
  • # urllib2_urlerror.py
    
    import urllib2
    
    requset = urllib2.Request('http://www.ajkfhafwjqh.com')
    
    try:
        urllib2.urlopen(request, timeout=5)
    except urllib2.URLError, err:
        print err
    
  • 운영 결과는 다음과 같습니다.
  • 
    urlopen error, 8, 。
    

    HTTPError

  • HTTPError는 URLError의 하위 클래스입니다. 저희가 요청을 할 때 서버에서 응답 대상에 대응하는데 그 중에는 숫자'응답 상태 코드'가 포함되어 있습니다.
  • urlopen 또는opener.open에서 처리할 수 없는 경우 HTTP Error가 발생하여 해당 상태 코드에 대응하고 HTTP 상태 코드는 HTTP 프로토콜이 반환하는 응답 상태를 나타냅니다.

  • urllib2는 방향을 바꾸는 페이지 (즉 3으로 시작하는 응답 코드) 를 처리할 수 있습니다. 100-299 범위의 번호는 성공을 표시하기 때문에 400-599의 오류 번호만 볼 수 있습니다.
    # urllib2_httperror.py
    import urllib2
    requset = urllib2.Request('http://blog.baidu.com/itcast')
    try:
        urllib2.urlopen(requset)
    except urllib2.HTTPError, err:
        print err.code
        print err
    
  • 운영 결과는 다음과 같습니다.
    404
    HTTP Error 404: Not Found
    
  • HTTP Error, 404 오류, Not Found 오류로 인해 서버에서 요청한 페이지를 찾을 수 없습니다.보통 이런 오류가 발생합니다. URL이 틀렸거나 IP가 봉인되었습니다.

    개선판

  • HTTPError의 상위 클래스가 URLError이기 때문에 상위 클래스의 이상은 하위 클래스 이상 뒤에 써야 하기 때문에 상기 코드는 이렇게 고칠 수 있다.
  • # urllib2_botherror.py
    
    import urllib2
    
    requset = urllib2.Request('http://blog.baidu.com/itcast')
    
    try:
        urllib2.urlopen(requset)
    
    except urllib2.HTTPError, err:
        print err.code
    
    except urllib2.URLError, err:
        print err
    
    else:
        print "Good Job"
    
  • 운영 결과는 다음과 같습니다. 404
  • 이렇게 하면 우리는 먼저 자류의 이상을 포획할 수 있다. 만약에 자류가 포획하지 못하면 부류의 이상을 포획할 수 있다.

  • HTTP 응답 상태 코드 참조:


    1xx: 정보

  • 100 Continue: 서버는 일부 요청만 받았지만 서버가 이 요청을 거절하지 않으면 클라이언트는 나머지 요청을 계속 보내야 합니다.
  • 101 Switching Protocols: 서버 전환 프로토콜: 서버는 고객의 요청에 따라 다른 프로토콜로 전환됩니다.

  • 2xx: 성공

  • 200 OK: 요청 성공(GET 및 POST 요청에 대한 응답 문서 다음)
  • 201 Created: 요청이 생성되고 새 리소스가 생성됩니다.
  • 202 Accepted: 처리 요청이 수락되었지만 처리가 완료되지 않았습니다.
  • 203 Non-authoritative Information: 문서가 정상적으로 돌아왔지만 일부 응답 헤더가 올바르지 않을 수 있습니다. 왜냐하면 문서의 복사본을 사용하기 때문입니다.
  • 204 No Content: 새 문서가 없습니다.브라우저는 원래 문서를 계속 표시해야 합니다.만약 사용자가 정기적으로 페이지를 새로 고칩니다. Servlet은 사용자 문서가 충분히 새롭다는 것을 확인할 수 있습니다. 이 상태 코드는 매우 유용합니다.
  • 205 Reset Content: 새 문서가 없습니다.그러나 브라우저는 표시된 내용을 재설정해야 합니다.브라우저에서 양식 입력 내용을 지우도록 강제합니다.
  • 206 Partial Content: 고객이 Range 헤더가 있는 GET 요청을 보냈고 서버가 완료했습니다.

  • 3xx: 리디렉션

  • 300 Multiple Choices: 다중 선택.링크 목록.사용자는 목적지까지 링크를 선택할 수 있습니다.최대 5개의 주소를 허용합니다.
  • 301 Moved Permanently: 요청한 페이지가 새 URL로 이동되었습니다.
  • 302 Moved Temporarily: 요청한 페이지가 새 URL로 임시로 옮겨졌습니다.
  • 303 See Other: 요청한 페이지는 다른 URL에서 찾을 수 있습니다.
  • 304 Not Modified: 문서가 예상대로 수정되지 않았습니다.클라이언트가 버퍼링된 문서를 가지고 조건부 요청을 보냈습니다. (일반적으로 If-Modified-Since 헤더는 고객이 지정한 날짜보다 업데이트하고 싶은 문서만 표시합니다.)서버는 원래 버퍼링된 문서를 계속 사용할 수 있다고 고객에게 알려 줍니다.
  • 305 Use Proxy: 고객이 요청한 문서는 Location 헤더에서 지정한 프록시 서버를 통해 추출해야 합니다.
  • 306 Unused: 이 코드는 이전 버전에 사용됩니다.현재 이미 더 이상 사용하지 않지만, 코드는 여전히 보존되어 있다.
  • 307 Temporary Redirect: 요청된 페이지가 새 URL로 임시로 이동되었습니다.

  • 4xx: 클라이언트 오류

  • 400 Bad Request: 서버가 요청을 이해하지 못했습니다.
  • 401 Unauthorized: 요청된 페이지에는 사용자 이름과 비밀번호가 필요합니다.
  • 401.1: 로그인 실패.
  • 401.2: 서버 구성으로 인해 로그인이 실패했습니다.
  • 401.3: 자원에 대한 ACL 제한으로 인해 승인되지 않았습니다.
  • 401.4: 필터 인증 실패.
  • 401.5: ISAPI/CGI 애플리케이션 라이센스가 실패했습니다.
  • 401.7: 웹 서버의 URL 승인 정책에 대한 액세스가 거부되었습니다.이 오류 코드는 IIS 6.0 전용입니다.

  • 402 Payment Required: 이 코드는 사용할 수 없습니다.
  • 403 Forbidden: 요청된 페이지에 대한 액세스가 금지됩니다.
  • 403.1: 액세스가 금지됩니다.
  • 403.2: 읽기 액세스가 금지됩니다.
  • 403.3: 쓰기 액세스가 금지됩니다.
  • 403.4: SSL 필요
  • 403.5: SSL 128 필요
  • 403.6: IP 주소가 거부되었습니다.
  • 403.7: 클라이언트 인증서가 필요합니다.
  • 403.8: 사이트 액세스가 거부되었습니다.
  • 403.9: 사용자 수가 너무 많습니다.
  • 403.10: 잘못된 구성입니다.
  • 403.11: 암호 변경.
  • 403.12: 맵에 대한 액세스를 거부합니다.
  • 403.13: 클라이언트 인증서가 취소되었습니다.
  • 403.14: 디렉터리 목록을 거부합니다.
  • 403.15: 클라이언트 액세스 라이센스를 초과합니다.
  • 403.16: 클라이언트 인증서가 신뢰할 수 없거나 유효하지 않습니다.
  • 403.17: 클라이언트 인증서가 만료되었거나 유효하지 않습니다.
  • 403.18: 현재 응용 프로그램 풀에서 요청한 URL을 실행할 수 없습니다.이 오류 코드는 IIS 6.0 전용입니다.
  • 403.19: 이 응용 프로그램 풀의 클라이언트를 위해 CGI를 실행할 수 없습니다.이 오류 코드는 IIS 6.0 전용입니다.
  • 403.20: Passport 로그인 실패.이 오류 코드는 IIS 6.0 전용입니다.

  • 404 Not Found: 서버에서 요청한 페이지를 찾을 수 없습니다.
  • 404.0: 파일이나 디렉토리를 찾을 수 없습니다.
  • 404.1: 요청한 포트에서 웹 사이트를 액세스할 수 없습니다.
  • 404.2: 웹 서비스 확장 잠금 정책이 이 요청을 차단합니다.
  • 404.3: MIME 매핑 정책이 이 요청을 차단합니다.

  • 405 Method Not Allowed 요청에 지정된 메서드는 허용되지 않습니다.
  • 406 Not Acceptable: 서버가 생성한 응답을 클라이언트가 받아들일 수 없습니다.
  • 407 Proxy Authentication Required: 사용자는 프록시 서버를 사용하여 먼저 검증을 해야 요청이 처리됩니다.
  • 408 Request Timeout: 요청이 서버의 대기 시간을 초과했습니다.
  • 409 Conflict: 충돌로 인해 요청이 완료되지 않습니다.
  • 410 Gone: 요청된 페이지를 사용할 수 없습니다.
  • 411 Length Required: "Content-Length"가 정의되지 않았습니다.이 내용이 없으면 서버에서 요청을 받지 않습니다.
  • 412 Precondition Failed: 요청의 전제 조건이 서버에 의해 실패로 평가되었습니다.
  • 413 Request Entity Too Large: 요청한 실체가 너무 커서 서버가 요청을 받아들이지 않습니다.
  • 414 Request-url Too Long: url이 너무 길어서 서버가 요청을 받아들이지 않습니다.post 요청이 긴 검색 정보를 가진 get 요청으로 바뀌면 이런 상황이 발생합니다.
  • 415 Unsupported Media Type: 미디어 유형이 지원되지 않으므로 서버에서 요청을 수락하지 않습니다.
  • 416 Requested Range Not Satisfiable: 서버는 고객이 요청한 Range 헤더를 충족시키지 못합니다.
  • 417 Expectation Failed: 실행 실패.
  • 423: 잠금 오류입니다.

  • 5xx: 서버 오류

  • 500 Internal Server Error: 요청이 완료되지 않았습니다.서버에서 알 수 없는 상황이 발생했습니다.
  • 500.12: 응용 프로그램이 웹 서버에서 다시 시작하느라 바쁩니다.
  • 500.13: 웹 서버가 너무 바쁩니다.
  • 500.15: Global에 직접 요청하는 것은 허용되지 않습니다.asa.
  • 500.16: UNC 인증 자격 증명이 잘못되었습니다.이 오류 코드는 IIS 6.0 전용입니다.
  • 500.18: URL 인증 스토리지를 열 수 없습니다.이 오류 코드는 IIS 6.0 전용입니다.
  • 500.100: 내부 ASP 오류.

  • 501 Not Implemented: 요청이 완료되지 않았습니다.서버에서 요청한 기능을 지원하지 않습니다.
  • 502 Bad Gateway: 요청이 완료되지 않았습니다.서버가 업스트림 서버에서 잘못된 응답을 받았습니다.
  • 502.1: CGI 어플리케이션 시간 초과. ·
  • 502.2: CGI 응용 프로그램에서 오류가 발생했습니다.

  • 503 Service Unavailable: 요청이 완료되지 않았습니다.서버의 임시 과부하 또는 당장.
  • 504 Gateway Timeout: 게이트웨이 시간 초과.
  • 505 HTTP Version Not Supported: 서버에서 요청에 명시된 HTTP 프로토콜 버전을 지원하지 않음
  • 좋은 웹페이지 즐겨찾기