>  기사  >  백엔드 개발  >  Python3의 http.client 모듈에 대한 심층적인 이해

Python3의 http.client 모듈에 대한 심층적인 이해

高洛峰
高洛峰원래의
2017-03-31 09:42:287256검색

이 글은 주로 Python3 관련 정보를 소개합니다. http.client 모듈에 대해 자세히 소개되어 있으니 필요하신 분들은 아래에서 참고하시면 됩니다.

http 모듈 소개

Python3의 http 패키지에는 HTTP 프로토콜 개발을 위한 여러 모듈이 포함되어 있습니다.

  • http.client는 상위 수준에서 사용되는 하위 수준 HTTP 프로토콜 클라이언트입니다. urllib.request 모듈에서 사용됩니다.

  • http.server 소켓 서버를 기반으로 하는 기본 HTTP 서버용 클래스가 포함되어 있습니다. 쿠키는 쿠키를 구현합니다

    상태
  • 관리
  • http.cookiejar 쿠키 관련

  • http 모듈은 또한 일련의 HTTP를 정의합니다.

    상태 코드
  • . Python 3.5 클라이언트 모듈

HTTPStatus 클래스가 추가되었습니다. 모듈은 http 및 https 프로토콜 클라이언트를 구현하는 클래스를 정의합니다. 이 모듈은 일반적으로 직접 사용되지 않지만 .request 모듈은 이를 사용하여 URL을 처리합니다. 1. http.client.HTTP_PORT

http 프로토콜의 기본 포트 번호는 항상 80입니다2. http.client.HTTPS_PORT https 프로토콜의 기본 포트 번호는 항상 포트 443입니다.

3. http.client.responses

는 HTTP 1.1 상태 코드를

W3C

이름 사전에 매핑합니다. 예:

>>> 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>, ...]
기본 클래스

HTTPConnection 클래스

http.client.responses[http.client.NOT_FOUND] is 'Not Found'
HTTPConnection 인스턴스 HTTP 서버와의 트랜잭션을 나타냅니다.

HTTPConnection을 인스턴스화할 때 호스트 및 선택적 포트 번호를 전달해야 합니다. 포트가 전달되지 않고 호스트

문자열

이 호스트:포트 형식인 경우 포트 값이 추출되고, 그렇지 않으면 기본 8포트가 사용됩니다.

선택적 매개변수인 timeout이 제공되면 차단 작업은 지정된 시간 이후에 타임아웃됩니다. 제공되지 않으면 기본 전역 시간 초과 설정이 사용됩니다.

선택적 매개변수 source_address는 HTTP 연결의 소스 주소로 사용되는 호스트와 포트(host,port)의 튜플 형식이어야 합니다.

샘플 코드는 다음과 같습니다.

http.client.HTTPConnection(host, port=None, [timeout, ]source_address=None)
3.2 버전에서 source_address가 추가되었습니다.

버전 3.4에서는 엄격한 매개변수가 제거되었습니다.

HTTPSConnection 클래스

>>> 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)
HTTPSConnection은 SSL을 사용하여 보안 서버에 연결하는 HTTPConnection의 하위 클래스입니다.

기본 포트는 443입니다. context가 지정된 경우 다양한 SSL 옵션을 설명하는 ssl.SSLContext 클래스의 인스턴스여야 합니다.

key_file 및 cert_file은 더 이상 사용되지 않으며 ssl.SSLContext.load_cert_chain() 으로 대체되었습니다. 또는 ssl.create_default_context()를 사용하여 시스템이 신뢰하는 CA 인증서를 선택하세요.

check_hostname 매개변수도 더 이상 사용되지 않습니다. 컨텍스트의 ssl.SSLContext.check_hostname

속성을 사용하세요.

HTTPResponse 클래스

HTTPSConnection(host, port=None, key_file=None, cert_file=None, [timeout, ]source_address=None, *, context=None, check_hostname=None)
이 인스턴스는 연결이 성공하면 반환됩니다. 이 클래스의 개체는 사용자가 직접 인스턴스화할 수 없습니다.

HTTPMessage 클래스

HTTPMessage 인스턴스는 HTTP 응답에서 반환된 헤더를 보유합니다.

예외 클래스

HTTP

예외

클래스

Exception 클래스의 하위 클래스이자 http 모듈에 있는 다른 예외 클래스의 기본 클래스입니다.
기타 예외 클래스:

  • NotConnected

  • InvalidURL

  • UnknownProtocol

  • UnknownTransferEncoding

  • UnimplementedFileMode

  • IncompletedRead

  • ImproperConnectionState

  • BadStatusLine

  • LineTooLong

  • CannotSendRequest

  • CannotSendHeader

  • ResponseNotReady

  • RemoteDisconnected

수업 방법

HTTPConnection 객체 메서드

HTTPConnection 인스턴스에는 다음 메서드가 있습니다.

1. HTTPConnection.request(method, url, body=None, headers={})

지정된 방법과 URL 링크를 사용하여 서버에 요청을 보냅니다.

본문 부분을 지정하는 경우 헤더 부분을 보낸 후 본문 부분을 보냅니다. 본문 부분은 문자열, 바이트열 객체, 파일 객체 또는 바이트열 객체의 반복자가 될 수 있습니다. 다양한 신체 유형은 다양한 요구 사항에 해당합니다.

헤더 매개변수는 사전 유형인 HTTP 헤더의 매핑이어야 합니다.

헤더에 Content-Length 항목이 포함되어 있지 않으면 본문을 기준으로 자동으로 추가됩니다.

2. HTTPConnection.getresponse()

는 서버에서 반환된 콘텐츠를 가져오기 위해 요청이 전송된 후에 호출되어야 합니다.

3. HTTPConnection.set_debuglevel(level)

debug 수준을 설정합니다. 기본 디버그 수준은 0입니다. 이는 디버그 출력이 없음을 의미합니다.

4. HTTPConnection.set_tunnel(host, port=None, headers=None)

프록시 서버를 사용하여 연결을 허용하는 HTTP 터널 링크의 호스트와 포트를 설정합니다.

5. HTTPConnection.connect()

지정된 서버에 연결합니다. 기본적으로 이 메서드는 클라이언트가 연결되지 않은 경우 요청 시 자동으로 호출됩니다.

6. HTTPConnection.close()

링크를 닫습니다.

7. HTTPConnection.putrequest(request, selector,skip_host=False,skip_accept_encoding=False)

서버와 연결에 성공하면 이 메소드를 먼저 호출해야 합니다.

서버로 전송되는 콘텐츠에는 요청 문자열, 선택기 문자열 및 HTTP 프로토콜 버전이 포함됩니다.

8. HTTPConnection.putheader(header, 인수[, …])

HTTP 헤더를 서버로 보냅니다.

서버로 전송되는 내용에는 헤더 헤더, 콜론, 공백 및 매개변수 목록의 첫 번째 항목이 포함됩니다.

9. HTTPConnection.endheaders(message_body=None)

헤더의 끝을 식별하기 위해 서버에 빈 줄을 보냅니다.

10. HTTPConnection.send(data)

서버에 데이터를 보냅니다.

은 endheaders() 메서드 뒤, getresponse() 메서드 앞에 호출되어야 합니다.

HTTPResponse 객체 메서드

HTTPResponse 인스턴스에는 서버에서 반환된 HTTP 응답이 포함되어 있습니다.

요청 헤더와 본문 부분에 액세스하는 방법을 제공합니다.

HTTPResponse는 반복 가능한 객체이며 with 문을 사용하여 선언할 수 있습니다.

HTTPResponse 인스턴스에는 다음과 같은 메서드가 있습니다.

1. HTTPResponse.read([amt])

응답의 본문 부분을 읽고 반환합니다.

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()

위 내용은 Python3의 http.client 모듈에 대한 심층적인 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.