目录
一、post请求
1、post请求出现的场景
- 登录注册
- 传输大文本内容
2、如何发送post请求
- data参数接受一个字典
- request.post(url, data)
3、get和post的区别
- get使用比较多,get直接向服务器发送请求,获取响应数据
- post请求需要客户端先给服务器一些数据,然后再获取响应
- get请求可以携带数据,但是参数在url中,不安全,而post请求通过data参数来携带数据,较为安全
二、模拟金山翻译
1、实现思路
- 抓包确定请求的url地址
- 确定请求的参数
- 确定翻译后内容的位置
- 模拟浏览器获取数据
2、具体实现步骤
- 进入金山翻译的网页,打开网页检查,点击Network进行抓包
- 清空点击Network后看到的包,以便于以后更好的抓包
- 输入翻译内容后,有一些包出现,从这些出现的包中找到有翻译内容的包
- 找到目标,发现有对应参数的出现
- 点击Response,按下Crtl + “ F ”键,出现搜寻框,输入翻译后的内容(China),如果找到翻译内容则这就是我们要找的包,如果没有翻译内容则需要重新抓包
- 可重复几次(2)~(5)步,发现规律,参数中,除了“from”和“to”的参数不变,只有q的参数改变,于是开始进行模拟
(7)代码演示
- 当我们打印获取的信息时发现它是字符串类型,是字符串中包含着字典,可以理解为:"{}",于是我们可以通过eval()函数除去它的字符串,获取字典
3、实现源代码
import requests
# 获取翻译包的url
url = 'https://ifanyi.iciba.com/index.php?c=trans'
# 构建请求头
headers = {
'User-Agent': '', # 每个人的User_Agent不同,自己可以通过抓的包里复制粘贴
'Referer': 'https://www.iciba.com/',
'Host': 'ifanyi.iciba.com'
}
# 实现用户输入的功能
content = input('请输入您想翻译的内容:')
# 构建参数字典
post_data = {
'from': 'zh',
'to': 'en',
'q' : content,
}
# 发送请求
res = requests.post(url, headers=headers, data=post_data)
res_1 = res.content.decode()
print(eval(res_1)['out'])