Python自带的http模块是Python的标准库之一,常用于HTTP客户端和服务器端编程。它提供了许多功能和接口,可以让我们轻松地进行HTTP请求和响应的处理。本文从多个角度详细介绍了Python自带的http模块。

一、HTTP请求
我们可以通过使用Python自带的http.client模块来发起HTTP请求。http.client模块提供了HTTPConnection类,我们可以实例化该类,然后调用request()方法来发起HTTP请求。
实例代码:
```python
import http.client
conn = http.client.HTTPSConnection("www.python.org")
conn.request("GET", "/index.html")
response = conn.getresponse()
print(response.status, response.reason)
conn.close()
````
首先需要使用HTTPConnection类来创建HTTP连接,参数中指定了URL主机名和端口号。接下来调用request()方法来发起HTTP请求,参数包括请求方法(如GET或POST)和请求路径(如/index.html)。最后调用getresponse()方法来获取响应对象。响应对象包含了HTTP响应的状态码和原因短语、消息体等信息。
二、HTTP响应
我们可以通过使用Python自带的http.client模块来处理HTTP响应。response对象提供了多个方法来获取HTTP响应数据,如status用于获取HTTP状态码,headers用于获取HTTP响应头部信息,read用于获取HTTP响应内容。
实例代码:
```python
import http.client
conn = http.client.HTTPSConnection("www.python.org")
conn.request("GET", "/index.html")
response = conn.getresponse()
print(response.status, response.reason)
data = response.read()
print(data.decode())
conn.close()
````
三、HTTPServer
Python自带的http.server模块提供了一个简单的HTTP服务器实现。我们可以使用http.server模块提供的SimpleHTTPRequestHandler类,继承该类并重写do_GET()方法,然后创建HTTPServer对象并指定服务器地址和端口号,最后调用HTTPServer对象的serve_forever()方法来启动HTTP服务器。
实例代码:
```python
from http.server import HTTPServer, BaseHTTPRequestHandler
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
self.wfile.write(b"Hello World !")
return
httpd = HTTPServer(('localhost', 8000), MyHandler)
print("Serving on port 8000...")
httpd.serve_forever()
````
我们首先定义了一个继承BaseHTTPRequestHandler类的MyHandler类,然后重写了do_GET()方法。在do_GET()方法中,我们需要先调用send_response()方法来发送HTTP响应的状态码,然后使用send_header()方法发送HTTP响应头部信息,最后使用wfile.write()方法来发送HTTP响应内容。
四、Handle与handle_one_request方法
handle方法可以处理一个HTTP请求,handle_one_request方法可以处理一个HTTP请求并关闭连接。在http.server模块中,BaseHTTPRequestHandler类中提供了handle()和handle_one_request()方法。
实例代码:
```python
from http.server import HTTPServer, BaseHTTPRequestHandler
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
self.wfile.write(b"Hello World !")
return
def run(server_class=HTTPServer, handler_class=MyHandler):
server_address = ('', 8000)
httpd = server_class(server_address, handler_class)
httpd.handle_request()
run()
````
我们定义了一个run()函数来启动HTTP服务器,并调用HTTPServer类的handle_request()方法来处理HTTP请求并关闭连接。
综上所述,Python自带的http模块常常用于HTTP客户端和服务器端编程。无论是发起HTTP请求还是处理HTTP响应,Python自带的http模块都能够轻松地完成。