详解Python HTTP 请求响应模型

  • Post category:Python

Python HTTP请求响应模型的完整攻略包括请求和响应两部分,在此给出详细的说明。

请求

在Python中,主要使用requests库来发送HTTP请求。这个库提供了很多方便的函数,可以让我们快速地发出GET、POST等请求。

发送GET请求

发送GET请求的方法是 requests.get()。该方法接收一个URL参数,可以传递一些参数和头部信息。例如:

import requests

response = requests.get('https://www.baidu.com')

如果服务器能够正常响应,则返回的response对象将包含HTTP状态码、响应头部信息和响应正文。我们可以通过访问response对象的属性来获取这些信息,例如:

print(response.status_code)   # 获取状态码
print(response.headers)       # 获取响应头
print(response.text)          # 获取响应正文(字符串)
print(response.content)       # 获取响应正文(字节流)

发送POST请求

如果需要发送POST请求,则可以使用 requests.post() 方法。这个方法与get方法一样,只不过可以传递payload参数,用于传递需要提交的数据。例如:

import requests

data = {'username': 'admin', 'password': '123456'}
response = requests.post('http://www.example.com/login', data=data)

添加请求头

在使用requests库发送请求时,默认会添加一些头部信息,例如User-Agent等。为了更好地模拟浏览器行为,我们可以自己设置请求头。示例如下:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get('https://www.baidu.com', headers=headers)

响应

发送完请求后,服务器会返回一个HTTP响应。对于Python的requests库,响应内容被封装到response对象中。

响应状态码

响应状态码指示HTTP请求是否成功。一般来说,状态码以数字表示。常见的HTTP状态码有:

  • 200 OK:请求成功
  • 301 Moved Permanently:重定向到新的URL
  • 401 Unauthorized:未授权访问
  • 404 Not Found:请求的资源不存在
  • 500 Internal Server Error:服务器内部错误

在requests库中,可以通过response.status_code获取响应状态码。

响应头

响应头是包含在HTTP响应中的信息,用于描述服务器、请求结果等信息。在requests库中,可以通过response.headers获取响应头信息。例如:

import requests

response = requests.get('https://www.baidu.com')
print(response.status_code)
print(response.headers)

响应正文

响应正文是包含在响应体中的信息。一般来说,响应正文可以是HTML网页、JSON数据、XML数据等形式。在requests库中,可以通过response.text获取响应正文。如果需要获取字节流形式的正文,则可以使用response.content方法。

示例

下面是一个使用requests库发送POST请求的示例。假设我们需要登录一个网站,提交的用户名和密码如下:

import requests

# 登录信息
data = {'username': 'admin', 'password': '123456'}

# 请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

# 发送POST请求
response = requests.post('http://www.example.com/login', data=data, headers=headers)

# 获取响应状态码和响应正文
status_code = response.status_code
content = response.text

# 打印结果
print('状态码:', status_code)
print('响应正文:', content)

接下来是一个使用requests库发送GET请求的示例。假设我们需要下载一个文件,文件的URL如下:

import requests

# 请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

# 发送GET请求
response = requests.get('http://www.example.com/sample.zip', headers=headers)

# 写入文件
with open('sample.zip', 'wb') as f:
    f.write(response.content)

print('文件下载完成')

以上是Python HTTP请求响应模型的完整攻略,其中包括了示例及详细的说明。