CodeGym /课程 /Python SELF ZH /实践网络操作

实践网络操作

Python SELF ZH
第 23 级 , 课程 3
可用

4.1 处理响应

模块 requests 提供了方便的方法来处理服务器的响应。

状态码

除了响应外,服务器还会发送请求处理的状态。 状态信息包含在字段 status_codereason 中。下面是一个示例:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)  # 输出响应的状态码
print(response.reason)  # 输出状态的文本描述
print(response.ok)  # 如果状态码小于400则返回True
        

标题

当然,哪有 HTTP 请求是没有标题的呢?如果你需要请求或响应的标题,可以通过字段 headers 来访问:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.headers)  # 输出响应的标题
print(response.headers['Content-Type'])  # 输出特定标题的值
            

响应主体

服务器的响应可能包含字节集、文本、jsonxml。如果你知道你请求服务器的内容是什么, 可以使用其中一个方法/字段直接获取需要的对象类型:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.text)  # 输出响应的文本
print(response.json())  # 以JSON格式输出响应体
print(response.content)  # 以字节格式输出响应体
        

更多关于标题 (headers) 和响应状态的细节你将在网络架构的讲座中了解到。

4.2 处理错误

模块 requests 提供了用于错误处理的异常。

HTTP 标准不包含异常,相反它使用错误代码 (status_code)。如果你希望在请求失败时产生一个 Python 异常, 你需要显式调用 函数 raise_for_status()

示例:


import requests

try:
    response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
    response.raise_for_status()  # 为4xx和5xx状态码生成异常
except requests.exceptions.HTTPError as err:
    print(f"HTTP error occurred: {err}")
except Exception as err:
    print(f"Other error occurred: {err}")
else:
    print("Success!")
        

更多关于错误代码的细节你可以在网络架构的讲座中了解。

4.3 发送数据

在 JSON 发明之前,大量数据是通过“表单”发送的。表单是浏览器页面的一个特殊对象(以及 HTTP 数据标准)。 如果你想通过“表单”发送数据,只需在请求中传递参数 data

注意! GET 请求不支持表单,因为它们不包含请求主体。所有数据仅在 URL 中传递。

GET请求 中发送数据

GET请求 中,数据通过 URL 参数传递。以下是一个示例:


import requests

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url)  # 输出带参数的URL
    

发送表单数据

我们会使用 POST请求 向服务器发送数据。

示例:


import requests

data = {
    'username': 'example',
    'password': 'password'
}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())
        

发送文件

如果你想在互联网上传输二进制数据,比如上传图片,你需要通过参数 files 在请求中传递你的文件或文件们。

示例:


import requests

files = {'file': open('example.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
        

就像一加一一样简单。如果你想发送多个文件,只需在 files 变量中以任意名称列出它们。

注意! 不要忘记在发送后关闭文件以避免资源泄漏。最好使用 with 结构,它会在操作完成后自动关闭文件:


import requests

with open('example.txt', 'rb') as f:
    files = {'file': f}
    response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
        

4.4 登录和授权

API(应用程序编程接口)是一套允许不同程序互相交互的规则和协议。很多网站和服务都只允许在登录后发送请求并与其 API 一起工作。

成功登录后,你会获得一个特殊的对象——会话 (session),它包含你与服务器“授权会话”的唯一编号。对于后续的请求,你需要使用这个对象。

认证

为了登录服务器,需要进行认证(登录过程),这需要在请求中传递凭据。


import requests
from requests.auth import HTTPBasicAuth
        
response = requests.get('https://httpbin.org/basic-auth/user/pass', \ 
                        auth=HTTPBasicAuth('user', 'pass'))
print(response.status_code)
        
    

这就是授权过程,但通常它与会话一起使用。

使用会话

会话允许在请求之间保存参数,如 cookies 或用户授权信息。


import requests

payload = {
    'username': 'your_username',
    'password': 'your_password'
}
            
# 创建会话
session = requests.Session()
            
# 登录网站
login_response = session.post('https://example.com/login', data = payload)
            
# 登录用户的会话后续操作
data_response = session.get('https://example.com/api/data')
print(data_response.json())
        
2
任务
Python SELF ZH, 第 23 级, 课程 3
已锁定
使用requests模块处理服务器响应
使用requests模块处理服务器响应
2
任务
Python SELF ZH, 第 23 级, 课程 3
已锁定
使用 requests 模块处理请求错误
使用 requests 模块处理请求错误
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION