1 文件上传
使用 requests 库进行文件上传非常方便。可以通过传递一个 files 参数来指定要上传的文件。
import requests # 设置上传的文件路径和目标 URL file_path = 'path/to/file.jpg' url = 'https://api.example.com/upload' # 创建文件对象,并设置文件名和文件内容类型 files = {'file': open(file_path, 'rb')} # 发送 POST 请求并上传文件 response = requests.post(url, files=files) # 检查响应状态码 if response.status_code == 200: # 获取响应内容(文本格式) content = response.text print(f'Response content: {content}') else: print('Failed to upload file. Status code:', response.status_code)
在上述示例代码中,我们首先指定了要上传的文件路径 file_path 和目标 URL url。然后,创建了一个 files
字典,其中键为 'file'
,值为使用 open()
函数打开文件对象。注意,这里需要将文件以二进制模式打开 ('rb')
。
接下来,我们使用 requests.post()
方法发送 POST 请求,并通过参数 files=files
来指定要上传的文件。
最后,我们检查响应状态码是否为 200,如果成功,则获取响应内容并打印出来。如果上传失败,则打印相应的错误信息和状态码。
注意:可以根据实际需求对文件上传进行更多的定制,例如设置文件名、文件类型等。requests 库提供了丰富的选项来满足不同的文件上传需求。可以根据具体情况进行相应的设置,并将文件对象以适当的方式传递给 requests.post()
方法。
2 cookies处理
在使用 requests 库发送网络请求时,可以方便地处理和管理 cookies。Cookies 是服务器存储在用户浏览器中的数据,用于跟踪用户会话和存储用户信息。requests 库提供了一些方法来处理和操作 cookies。
- 获取 cookies: 可以使用
response.cookies
属性获取响应中的 cookies。它返回一个RequestsCookieJar
对象,可以通过索引或属性名访问特定的 cookie 值。 - 发送 cookies: 可以通过传递 cookies 参数将 cookies 添加到请求中。cookies 参数可以是一个字典,其中键为 cookie 名称,值为 cookie 值。
- 保存 cookies: 通过设置
session
属性为True
,可以创建一个会话对象,该对象将自动保存和管理 cookies。在后续请求中,会话对象会自动发送之前收到的 cookies,并接收和更新新的 cookies。
示例代码:
import requests # 发送 GET 请求并获取 cookies response = requests.get('https://api.example.com') cookies = response.cookies # 将 cookies 添加到后续请求中 url = 'https://api.example.com/data' response = requests.get(url, cookies=cookies) # 创建会话对象,并保存 cookies session = requests.Session() response = session.get('https://api.example.com/login') # 做其他操作,会话对象会自动发送和接收 cookies response = session.get('https://api.example.com/profile')
在上述示例代码中,我们首先发送一个 GET 请求并获取响应中的 cookies。通过 response.cookies
属性可以获得一个 RequestsCookieJar
对象,其中包含了响应中的 cookies。
接下来,我们将 cookies 添加到后续请求中,通过 cookies=cookies
参数传递给 requests.get()
方法。这样,在发送请求时会自动带上之前收到的 cookies。
另外,我们还创建了一个会话对象 session,通过 requests.Session()
创建。会话对象会自动保存和管理 cookies。在后续的请求中,直接使用会话对象发送请求,会话对象会自动发送和接收 cookies。
注意:需要注意的是,如果没有指定会话对象或手动处理 cookies,requests 库默认会将每个请求视为相互独立的,不会自动处理 cookies。
cookie从需要在开发者工具的抓包中找:
3 状态码处理
requests 库提供了一种简便的方式来处理 HTTP 请求的响应状态码。在发送请求后,可以通过访问 response.status_code
属性来获取响应的状态码,并根据状态码进行相应的处理。
以下是一些常见的 HTTP 状态码和其含义:
状态码 | 意义 |
200 OK | 请求成功,信息在返回的响应报文中 |
201 Created | 请求成功,并在服务器上创建了新资源 |
204 No Content | 请求成功,但响应中没有返回任何内容 |
301 Moved Permanently | 请求的对象已经被永远的转移了,新的URL定义在响应报文的Location,首部行中,客户软件将自动获取新的URL |
400 Bad Request | 一个通用的差错代码,指示该请求不能被服务器理解 |
401 Unauthorized | 请求未被授权,需要提供有效的身份验证信息 |
403 Forbidden | 请求被服务器拒绝,通常是因为权限不足 |
404 Not Found | 被请求的文档不在服务器上 |
500 Internal Server Error | 服务器内部发生错误,无法完成请求 |
505 HTTP Version Not Supported | 服务器不支持请求报文使用的HTTP协议版本 |
示例代码:
import requests # 发送 GET 请求 response = requests.get('https://api.example.com') # 获取响应状态码 status_code = response.status_code # 根据状态码进行处理 if status_code == 200: print('Request successful') elif status_code == 404: print('Page not found') elif status_code == 500: print('Internal Server Error') else: print('Unexpected status code:', status_code)
在上述示例代码中,我们发送了一个 GET 请求到 'https://api.example.com'
。然后,通过访问 response.status_code
来获取响应的状态码,并将其赋值给变量 status_code
。
接下来,我们使用条件语句对不同的状态码进行处理。以常见的状态码为例,如果状态码为 200,则表示请求成功,我们打印出相应的成功信息。如果状态码为 404,则表示页面未找到,我们打印出相应的错误信息。如果状态码为 500,则表示服务器内部错误,同样打印出相应的错误信息。对于其他未预料到的状态码,我们打印出无法识别的状态码信息。
注意:状态码的具体含义可能根据不同的 HTTP 协议版本和服务器实现有所差异。因此,在实际应用中,可能需要参考相应的文档或规范来了解每个状态码的含义,并根据具体情况进行适当处理。
4 异常处理
requests 库提供了一套完善的异常处理机制,用于捕获和处理与网络请求相关的异常。当发生异常时,可以通过捕获 requests.exceptions.RequestException
异常来处理,并根据不同的异常类型进行相应的操作。
import requests from requests.exceptions import RequestException try: # 发送 GET 请求 response = requests.get('https://api.example.com') # 检查响应状态码 response.raise_for_status() # 处理响应数据 data = response.json() print('Response data:', data) except requests.exceptions.HTTPError as err: print('HTTP Error:', err) except requests.exceptions.ConnectionError as err: print('Connection Error:', err) except requests.exceptions.Timeout as err: print('Timeout Error:', err) except requests.exceptions.RequestException as err: print('Error occurred:', err)
在上述示例代码中,我们首先尝试发送一个 GET 请求到 'https://api.example.com'
。然后,使用 response.raise_for_status()
方法检查响应的状态码,如果状态码表明请求失败,将会抛出 requests.exceptions.HTTPError
异常。
在 try
语句块中,我们通过多个 except
子句来捕获和处理不同类型的异常。例如,如果发生连接错误(如网络连接问题、DNS 错误等),将抛出 requests.exceptions.ConnectionError
异常;如果发生超时错误,将抛出 requests.exceptions.Timeout
异常。
最后,我们使用 requests.exceptions.RequestException
来捕获其他的请求异常,这包括 HTTPError、ConnectionError、Timeout 以及其他未明确定义的异常类型。在这个异常处理块中,可以打印出发生的异常信息,或者根据实际需求进行相应的错误处理。
注意:捕获 RequestException
异常将会捕获所有与请求相关的异常,因此它应该作为捕获异常的基类。如果你只想捕获特定类型的异常,可以将其放在更具体的子类异常之前。
通过合理的异常处理,可以增加代码的健壮性和可靠性,并提供有用的错误信息和反馈给用户。在实际使用中,可以根据具体的场景和需求,进一步处理异常、记录日志、重试请求或采取其他适当的措施。