1.组建get请求
import requests
# 不带参数的get请求
resp01 = requests.get("https://baidu.com")
print(resp01.status_code) # 获取响应的http状态码
print(resp01.text) # 获取响应的文本内容
print(resp01.url) # 获取完整的url
# 带参数的get请求
login_url = "http://localhost:8080/cms/manage/loginJump.do"
login_data = {
"userAccount": "admin",
"loginPwd": "123456"
}
resp02 = requests.get(login_url, login_data)
print(resp02.text)
print(resp02.url)
2.组建post请求
import requests
login_url = "http://localhost:8080/cms/manage/loginJump.do"
login_data = {
"userAccount": "admin",
"loginPwd": "123456"
}
### 1.直接调用post方法
resp01 = requests.post(login_url, login_data)
print(resp01.text)
print(resp01.url)
### 2.使用requests方法,参数为post或者get
resp02 = requests.request("post", login_url, data=login_data)
print(resp02.text)
print(resp02.url)
### 3.一般来说,data用在post请求中。params用在get请求中
login_data01 = {
"userAccount": "admin"
}
login_data02 = {
"loginPwd": "123456"
}
resp03 = requests.post(login_url, data=login_data01, params=login_data02)
print(resp03.text)
print(resp03.url)
3.接口串联的4种方式
3.1.手动构造请求头
import requests
### 1. cms登录
login_url = "http://localhost:8080/cms/manage/loginJump.do"
login_data = {
"userAccount": "admin",
"loginPwd": "123456"
}
login_resp = requests.post(login_url, login_data)
print(login_resp.text)
# 从响应头中拿到session_id
session_id = login_resp.headers["Set-Cookie"].split(";")[0]
### 2. cms查询用户
query_user_url = "http://localhost:8080/cms/manage/queryUserList.do"
query_user_data = {
"startCreateDate": "",
"endCreateDate": "",
"searchValue": "admin",
"page": "1"
}
# 构建一个请求头并加上前面拿到的session
headers = {
"Cookie": session_id
}
query_user_resp = requests.post(query_user_url, query_user_data, headers=headers)
print(query_user_resp.text[:100])
3.2.赋值给请求体中的token
import requests
import re
import json
### 1. 登录
login_url = "http://localhost:6666/login"
login_data = {
"username": "admin",
"password": "123456"
}
login_resp = requests.post(login_url, login_data)
print(login_resp.text)
# 使用正则提取token
# token = re.findall("\"token\":\"(.+?)\"", login_resp.text)[0]
# 把json响应体转换为python中的字典再提取token
token = json.loads(login_resp.text)['token']
### 2. 查询用户
query_user_url = "http://localhost:6666/queryUser"
query_user_data = {
"token": token
}
query_user_resp = requests.post(query_user_url, query_user_data)
print(query_user_resp.text)
3.3.post请求中的cookies参数
import requests
### 1. cms登录
login_url = "http://localhost:8080/cms/manage/loginJump.do"
login_data = {
"userAccount": "admin",
"loginPwd": "123456"
}
login_resp = requests.post(login_url, login_data)
print(login_resp.text)
# 获取cookies
c = login_resp.cookies
### 2. cms查询用户
query_user_url = "http://localhost:8080/cms/manage/queryUserList.do"
query_user_data = {
"startCreateDate": "",
"endCreateDate": "",
"searchValue": "admin",
"page": "1"
}
query_user_resp = requests.post(query_user_url, query_user_data, cookies=c)
print(query_user_resp.text[:100])
3.4.session方法
import requests
# 初始化上下文连接
s = requests.session()
s2 = requests.Session()
### 1. cms登录
login_url = "http://localhost:8080/cms/manage/loginJump.do"
login_data = {
"userAccount": "admin",
"loginPwd": "123456"
}
login_resp = s.post(login_url, login_data)
print(login_resp.text)
### 2. cms查询用户
query_user_url = "http://localhost:8080/cms/manage/queryUserList.do"
query_user_data = {
"startCreateDate": "",
"endCreateDate": "",
"searchValue": "admin",
"page": "1"
}
query_user_resp = s.post(query_user_url, query_user_data)
print(query_user_resp.text[:100])
4.组建请求时加上请求头
import requests
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74",
# "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36"
}
resp = requests.get("https://zhuanlan.zhihu.com/p/20410446", headers=headers)
# print(resp.text)
print(resp.url)
5.忽略http验证
import requests
# requests 2.23.0 可用
resp = requests.get("https://www.baidu.com", verify=False)
print(resp.text)
6.响应体编码格式
import requests
resp = requests.get("https://www.baidu.com")
# 手动设置编码格式
resp.encoding = "utf-8"
# 自动设置编码格式
resp.encoding = resp.apparent_encoding
print(resp.text)
7.处理json格式入参
import requests
import json
### 1. 把字典转换为json格式,手动拼接请求头,加上application/json
login_url = "http://localhost:5000/auth/login"
login_data = {
"username": "admin",
"password": "123456"
}
headers = {
"Content-Type": "application/json"
}
resp = requests.post(login_url, json.dumps(login_data), headers=headers)
print(resp.text)
### 2. 将参数传给json关键字,自动转换格式以及加上请求头
resp1 = requests.post(login_url, json=login_data)
print(resp1.text)
8.处理json格式出参
import requests
import json
login_url = "http://localhost:8080/cms/manage/loginJump.do"
login_data = {
"userAccount": "admin",
"loginPwd": "123456"
}
login_resp = requests.post(login_url, login_data)
print(login_resp.text) # json(字符串)
### 1.使用json模块中的.loads()方法
print(json.loads(login_resp.text)["msg"])
### 2.使用返回参数的.json()方法
print(login_resp.json()['msg'])
9.处理字节格式的响应
import requests
resp = requests.get("https://img-baofun.zhhainiao.com/market/b99b51e6c7945c9d5565861d397451cb_preview.mp4", verify=False)
# 获取字节格式响应体
mp4_bytes = resp.content
with open("test.mp4", "wb") as fwb:
fwb.write(mp4_bytes)
10.设置代理和超时时间
import requests
proxy= {
"http": "http://localhost:8888",
"https": "https://localhost:8888"
}
resp = requests.get("http://localhost/bbs", proxies=proxy, timeout=10)
11.禁止自动重定向
import requests
resp = requests.get("http://localhost:8080/cms", allow_redirects=False)
print(resp.headers)
resp1 = requests.get("http://localhost:8080" + resp.headers["Location"], allow_redirects=False)
print(resp1.headers)
resp2 = requests.get("http://localhost:8080" + resp1.headers["Location"], allow_redirects=False)
print(resp2.headers)
print(resp2.text)
12.使用超级鹰第三方获取验证码
from selenium import webdriver
from time import sleep
from library.chaojiying import Chaojiying_Client
# chaojiying import Chaojiying_Client
driver = webdriver.Chrome()
driver.get("http://www.chaojiying.com/user/login/")
driver.maximize_window()
sleep(1)
driver.find_element_by_name("user").send_keys("sss123")
driver.find_element_by_name("pass").send_keys("123123")
sleep(1)
pic_bytes = driver.find_element_by_css_selector(".login_form>form>div>img").screenshot_as_png
cjy = Chaojiying_Client("sss123", "123123", "909851")
resp = cjy.PostPic(pic_bytes, 1902)
print(resp)
driver.find_element_by_name("imgtxt").send_keys(resp["pic_str"])
sleep(1)
driver.find_element_by_class_name("login_form_input_submit").click()