Python中的GET和POST方法怎么用

发布时间:2022-01-24 16:00:24 作者:zzz
来源:亿速云 阅读:192
# Python中的GET和POST方法怎么用

## 1. HTTP请求方法概述

在Web开发中,GET和POST是最常用的两种HTTP请求方法。它们的主要区别在于:

- **GET**:用于请求数据,参数附加在URL中,有长度限制,适合非敏感信息
- **POST**:用于提交数据,参数在请求体中传输,无长度限制,适合敏感或大量数据

## 2. 使用Python发送GET请求

### 2.1 使用标准库urllib

```python
from urllib.request import urlopen
from urllib.parse import urlencode

# 基本GET请求
response = urlopen('http://httpbin.org/get')
print(response.read().decode('utf-8'))

# 带参数的GET请求
params = {'key1': 'value1', 'key2': 'value2'}
url = 'http://httpbin.org/get?' + urlencode(params)
response = urlopen(url)
print(response.read().decode('utf-8'))

2.2 使用第三方库requests(推荐)

import requests

# 基本GET请求
response = requests.get('http://httpbin.org/get')
print(response.text)

# 带参数的GET请求
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('http://httpbin.org/get', params=params)
print(response.json())  # 直接解析为JSON

2.3 处理响应

response = requests.get('http://httpbin.org/get')

# 响应状态码
print(response.status_code)

# 响应头
print(response.headers)

# 响应内容
print(response.text)  # 文本格式
print(response.json())  # JSON格式
print(response.content)  # 二进制格式

3. 使用Python发送POST请求

3.1 使用urllib发送POST

from urllib.request import Request, urlopen
from urllib.parse import urlencode

data = {'key1': 'value1', 'key2': 'value2'}
encoded_data = urlencode(data).encode('utf-8')

request = Request('http://httpbin.org/post', data=encoded_data)
response = urlopen(request)
print(response.read().decode('utf-8'))

3.2 使用requests发送POST(推荐)

import requests

# 表单数据POST
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('http://httpbin.org/post', data=data)
print(response.json())

# JSON数据POST
json_data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('http://httpbin.org/post', json=json_data)
print(response.json())

# 文件上传
files = {'file': open('example.txt', 'rb')}
response = requests.post('http://httpbin.org/post', files=files)
print(response.json())

3.3 设置请求头

headers = {
    'User-Agent': 'Mozilla/5.0',
    'Authorization': 'Bearer your_token_here',
    'Content-Type': 'application/json'
}

response = requests.post(
    'http://httpbin.org/post',
    json={'key': 'value'},
    headers=headers
)
print(response.json())

4. 高级用法

4.1 会话保持(Session)

session = requests.Session()

# 第一次请求设置cookie
response = session.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
print(response.text)

# 第二次请求会自动携带cookie
response = session.get('http://httpbin.org/cookies')
print(response.text)

4.2 超时设置

try:
    response = requests.get('http://httpbin.org/delay/5', timeout=3)
except requests.exceptions.Timeout:
    print("请求超时")

4.3 代理设置

proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}

response = requests.get('http://httpbin.org/ip', proxies=proxies)
print(response.json())

4.4 SSL证书验证

# 禁用SSL验证(不推荐生产环境使用)
response = requests.get('https://httpbin.org', verify=False)

# 使用自定义证书
response = requests.get('https://httpbin.org', cert=('/path/client.cert', '/path/client.key'))

5. 错误处理

try:
    response = requests.get('http://httpbin.org/status/404')
    response.raise_for_status()  # 如果状态码不是200,抛出HTTPError
except requests.exceptions.HTTPError as err:
    print(f"HTTP错误: {err}")
except requests.exceptions.ConnectionError as err:
    print(f"连接错误: {err}")
except requests.exceptions.Timeout as err:
    print(f"超时错误: {err}")
except requests.exceptions.RequestException as err:
    print(f"请求异常: {err}")

6. 实际应用示例

6.1 调用REST API

# 获取GitHub用户信息
response = requests.get('https://api.github.com/users/octocat')
if response.status_code == 200:
    user_data = response.json()
    print(f"用户名: {user_data['login']}")
    print(f"仓库数: {user_data['public_repos']}")

6.2 网页数据抓取

from bs4 import BeautifulSoup

response = requests.get('https://example.com')
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.find('title').text
print(f"网页标题: {title}")

6.3 表单自动提交

login_data = {
    'username': 'your_username',
    'password': 'your_password'
}

with requests.Session() as session:
    # 登录
    session.post('https://example.com/login', data=login_data)
    
    # 访问需要认证的页面
    response = session.get('https://example.com/dashboard')
    print(response.text)

7. 性能优化建议

  1. 连接复用:使用Session对象复用TCP连接
  2. 响应流式处理:对于大文件使用response.iter_content()
  3. 合理设置超时:避免长时间等待
  4. 异步请求:对于高并发场景考虑使用aiohttp
  5. 缓存常用请求:减少重复请求

8. 安全注意事项

  1. 敏感数据不要使用GET请求
  2. 验证SSL证书防止中间人攻击
  3. 对用户输入进行严格的验证和过滤
  4. 使用HTTPS加密通信
  5. 合理设置请求频率,避免被封禁

9. 总结

Python中实现GET和POST请求有多种方式: - 标准库urllib适合简单需求 - 第三方库requests功能更强大,API更友好 - 高级场景可以考虑aiohttp等异步库

根据实际需求选择合适的方法,并注意安全性和性能优化,可以高效地完成各种HTTP请求任务。 “`

这篇文章共计约1900字,详细介绍了Python中GET和POST方法的使用,包括基础用法、高级特性、实际应用和注意事项等内容,采用Markdown格式编写,代码示例清晰,层次结构分明。

推荐阅读:
  1. AJAX中post和get的区别
  2. java中post和get的区别

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python get post

上一篇:python学习中常见的误区有哪些

下一篇:Linux系统中怎么安装SQL server

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》