Python 3 의 http.client 모듈 을 깊이 이해 합 니 다.

http 모듈 개요
Python 3 의 http 패키지 에는 HTTP 프로 토 콜 을 개발 하 는 모듈 이 몇 개 포함 되 어 있 습 니 다.
  • http.client 는 더 높 은 urllib.request 모듈 에 의 해 사용 되 는 바 텀 HTTP 프로 토 콜 클 라 이언 트 입 니 다.
  • http.server 는 socketserver 기반 의 기본 HTTP 서버 클래스 를 포함 합 니 다.
  • http.cookies 쿠키 상태 관리 실현
  • http.cookiejar 는 쿠키 와 관련 이 있 습 니 다.
  • http 모듈 은 일련의 HTTP 상태 코드 도 정의 했다.
    HTTP Status 클래스 는 Python 3.5 버 전에 서 추 가 됩 니 다.
    
    >>> from http import HTTPStatus
    >>> HTTPStatus.OK<HTTPStatus.OK: 200>
    >>> HTTPStatus.OK == 200True
    >>> http.HTTPStatus.OK.value200
    >>> HTTPStatus.OK.phrase'OK'
    >>> HTTPStatus.OK.description'Request fulfilled, document follows'
    >>> list(HTTPStatus)[<HTTPStatus.CONTINUE: 100>, <HTTPStatus.SWITCHING_PROTOCOLS: 101>, ...]
    구체 적 인 HTTP 상태 코드 와 해당 하 는 설명 은 Python 의 공식 문서 에서 찾 을 수 있 습 니 다.https://docs.python.org/3/library/http.html
    http.client 모듈
    http.client 모듈 은 http 와 https 프로 토 콜 클 라 이언 트 를 실현 하 는 클래스 를 정의 합 니 다.
    이 모듈 은 보통 직접 사용 하지 않 고 포 장 된 urllib.request 모듈 로 URL 을 처리 합 니 다.
    상수
    http 모듈 의 상수:
    1、http.client.HTTP_PORT
    http 프로 토 콜 의 기본 포트 번호,항상 80 포트
    2、http.client.HTTPS_PORT
    https 프로 토 콜 의 기본 포트 번호,항상 443 포트
    3、http.client.responses
    W3C 이름 의 사전 에 HTTP 1.1 상태 코드 를 표시 합 니 다.
    예 를 들 면:
    
    http.client.responses[http.client.NOT_FOUND] is 'Not Found'
    기본 클래스
    HTTPConnection 클래스
    
    http.client.HTTPConnection(host, port=None, [timeout, ]source_address=None)
    HTTP Connection 인 스 턴 스 는 HTTP 서버 와 의 업 무 를 표시 합 니 다.
    HTTP Connection 을 예화 할 때 호스트 와 선택 할 수 있 는 포트 번 호 를 전달 해 야 합 니 다.전송 포트 가 없 으 면 호스트 문자열 이 host:port 형식 이면 포트 값 을 추출 합 니 다.그렇지 않 으 면 기본 8-포트 를 사용 합 니 다.
    선택 할 수 있 는 매개 변수 timeout 이 지정 되 어 있 으 면 차단 작업 은 주어진 시간 후에 시간 을 초과 합 니 다.지정 되 지 않 으 면 기본 전역 timeout 설정 을 사용 합 니 다.
    선택 가능 한 매개 변수 sourceaddress 는 host 와 port 의 모듈 형식(host,port)으로 HTTP 연결 의 원본 주소 로 사용 해 야 합 니 다.
    예제 코드 는 다음 과 같다.
    
    >>> h1 = http.client.HTTPConnection('www.python.org')
    >>> h2 = http.client.HTTPConnection('www.python.org:80')>>> h3 = http.client.HTTPConnection('www.python.org', 80)
    >>> h4 = http.client.HTTPConnection('www.python.org', 80, timeout=10)
    source_address 는 3.2 버 전에 추 가 됩 니 다.
    strict 매개 변 수 는 3.4 버 전에 서 제거 되 었 습 니 다.
    HTTPSConnection 클래스
    
    HTTPSConnection(host, port=None, key_file=None, cert_file=None, [timeout, ]source_address=None, *, context=None, check_hostname=None)
    HTTPSConnection 은 HTTPConnection 의 하위 클래스 로 SSL 을 사용 하여 보안 서버 와 연결 합 니 다.
    기본 포트 는 443 포트 입 니 다.context 가 지정 되 어 있 으 면 ssl.SSL Context 류 의 인 스 턴 스 로 서로 다른 SSL 옵션 을 설명 해 야 합 니 다.
    key_file 과 certfile 은 이미 버 려 졌 고,대신 ssl.SSL Context.loadcert_chain() 。혹은 ssl.create 사용default_context()에서 시스템 이 신뢰 하 는 CA 인증 서 를 선택 하 십시오.
    check_hostname 인자 도 버 려 졌 습 니 다.context 의 ssl.SSL Context.check 을 사용 합 니 다.hostname 속성.
    HTTP Response 클래스
    
    class http.client.HTTPResponse(sock, debuglevel=0, method=None, url=None)
    연결 이 성공 하면 이 인 스 턴 스 를 되 돌려 줍 니 다.이러한 대상 은 사용자 가 직접 예화 할 수 없습니다.
    HTTPMessage 클래스
    HTTP Message 인 스 턴 스 는 HTTP response 에서 돌아 오 는 머리 를 가지 고 있 습 니 다.
    이상 류
    HTTP Exception 클래스
    exception 클래스 의 하위 클래스 이자 http 모듈 의 다른 이상 클래스 의 기본 클래스 입 니 다.
    기타 이상 클래스:
  • NotConnected
  • InvalidURL
  • UnknownProtocol
  • UnknownTransferEncoding
  • UnimplementedFileMode
  • IncompletedRead
  • ImproperConnectionState
  • BadStatusLine
  • LineTooLong
  • CannotSendRequest
  • CannotSendHeader
  • ResponseNotReady
  • RemoteDisconnected
  • 유형 방법
    HTTP 연결 대상 방법
    HTTPConnection 인 스 턴 스 는 다음 과 같은 방법 이 있 습 니 다.
    1、HTTPConnection.request(method, url, body=None, headers={})
    지정 한 method 방법 과 url 링크 를 사용 하여 서버 에 요청 을 보 냅 니 다.
    바디 부분 을 지정 하면 바디 부분 은 헤더 부분 을 보 낸 후 보 냅 니 다.body 부분 은 문자열,바이트 대상,파일 대상 또는 바이트 대상 의 교체 기 일 수 있 습 니 다.서로 다른 body 유형 은 서로 다른 요구 에 대응 합 니 다.
    header 인 자 는 HTTP 머리의 맵 이 어야 하 며 사전 형식 입 니 다.
    헤더 에 Content-Length 항목 이 포함 되 어 있 지 않 으 면 body 에 따라 자동 으로 추 가 됩 니 다.
    2、HTTPConnection.getresponse()
    요청 을 보 낸 후에 야 서버 가 되 돌아 오 는 내용 을 호출 할 수 있 습 니 다.HTTP Response 인 스 턴 스 를 되 돌려 줍 니 다.
    3、HTTPConnection.set_debuglevel(level)
    디 버 깅 단 계 를 설정 합 니 다.기본 디 버 깅 단 계 는 0 입 니 다.디 버 깅 출력 이 없 음 을 의미 합 니 다.
    4、HTTPConnection.set_tunnel(host, port=None, headers=None)
    HTTP 터널 링크 의 호스트 와 포트 를 설정 합 니 다.프 록 시 서버 를 사용 할 수 있 습 니 다.
    5、HTTPConnection.connect()
    지정 한 서버 에 연결 합 니 다.기본 적 인 상황 에서 클 라 이언 트 가 연결 되 지 않 으 면 request 요청 시 자동 으로 이 방법 을 호출 합 니 다.
    6、HTTPConnection.close()
    링크 를 닫 습 니 다.
    7、HTTPConnection.putrequest(request, selector, skip_host=False, skip_accept_encoding=False)
    서버 와 의 링크 가 성공 하면 먼저 이 방법 을 사용 해 야 합 니 다.
    서버 에 보 내 는 내용 은 request 문자열,selector 문자열,HTTP 프로 토 콜 버 전 입 니 다.
    8、HTTPConnection.putheader(header, argument[, …])
    서버 에 HTTP 머리 를 보 냅 니 다.
    서버 에 보 내 는 내용 은 header 머리,사칭,빈 칸,매개 변수 목록 의 첫 번 째 입 니 다.
    9、HTTPConnection.endheaders(message_body=None)
    서버 에 빈 줄 을 보 내 머리 끝 을 표시 합 니 다.
    10、HTTPConnection.send(data)
    서버 에 데 이 터 를 보 냅 니 다.
    endheaders()방법 다음 과 getresponse()방법 전에 호출 해 야 합 니 다.
    HTTP Response 대상 방법
    HTTP Response 인 스 턴 스 는 서버 에서 돌아 오 는 HTTP 응답 을 포함 합 니 다.
    그것 은 요청 머리 와 body 부분 에 접근 하 는 방법 을 제공 했다.
    HTTP Response 는 교체 가능 한 대상 이 며 with 문 구 를 사용 하여 설명 할 수 있 습 니 다.
    HTTP Response 인 스 턴 스 는 다음 과 같은 방법 이 있 습 니 다.
    1、HTTPResponse.read([amt])
    response 의 body 부분 을 읽 고 되 돌려 줍 니 다.
    2、HTTPResponse.readinto(b)
    지정 한 바이트 길이 len(b)을 읽 고 버퍼 바이트 b 로 되 돌려 줍 니 다.
    함수 가 읽 은 바이트 수 를 되 돌려 줍 니 다.
    3、HTTPResponse.getheader(name,default=None)
    지정 한 이름 name 의 HTTP 헤더 값 을 되 돌려 줍 니 다.일치 하 는 name 값 이 없 으 면 기본 None 으로 되 돌려 줍 니 다.일치 하 는 것 이 여러 개 있 으 면 쉼표 로 구 분 된 모든 값 을 되 돌려 줍 니 다.
    4、HTTPResponse.getheaders()
    모든 머리 정보(header,value)를 원본 으로 되 돌려 줍 니 다.
    5、HTTPResponse.fileno()
    6、HTTPResponse.msg
    7、HTTPResponse.version。
    HTTP 프로 토 콜 버 전
    8、HTTPResponse.status
    HTTP 상태 코드
    9、HTTPResponse.reason
    10、HTTPResponse.debuglevel
    11、HTTPResponse.closed
    True 라면 연결 이 닫 혔 음 을 설명 합 니 다.
    예시
    
    import http.client
    import urllib,parser
    # #       https   
    conn = http.client.HTTPSConnection("www.python.org")
    #    request              
    conn.request("GET","/doc/")
    #       http response
    r1 = conn.getresponse()
    # HTTP    
    print(r1.status,r1.reason)
    # HTTP   
    print(r1.getheaders())
    # body   
    print(r1.read())
    #         ,      200    
    if not r1.closed:
     print(r1.read(200))
    #            
    conn.close()
    #              
    conn.request("GET","/parrot.spam")
    r2 = conn.getresponse()
    print(r2.status,r2.reason)
    conn.close()
    #    HEAD   ,          
    conn = http.client.HTTPSConnection("www.python.org")
    conn.request("HEAD","/")
    res = conn.getresponse()
    print(res.status,res.reason)
    data = res.read()
    print(len(data))
    conn.close()
    #    POST   ,        body   
    params = urllib.parse.urlencode({'@number':12524,'@type':'issue','@action':'show'})
    # post     ,    Content-type   ,              
    headers = {"Content-type":"application/x-www-form-urlencoded","Accept":"text/plain"}
    conn = http.client.HTTPConnection("bugs.python.org")
    conn.request("POST","/",params,headers)
    response = conn.getresponse()
    #       
    print(response.status,response.reason)
    print(response.read().decode("utf-8"))
    conn.close()
    총결산
    이상 은 이 글 의 모든 내용 입 니 다.본 논문 의 내용 이 여러분 에 게 python 을 배우 거나 사용 하 는 데 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 십시오.저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기