requests页面常用操作
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
requests页面常用操作
Requests 是一个 Python 的 HTTP 客户端库。
每次调用 requests 请求之后会返回一个 response 对象该对象包含了具体的响应信息。可以通过requests模拟提交请求来操作web页面。
例
import requests
# 发送请求
response = requests.get('https://www.runoob.com/')
# 返回网页内容
print(response.text)
1 requests主要方法
delete(url, args) | 发送 DELETE 请求到指定 url |
---|---|
get(url, params, args) | 发送 GET 请求到指定 url |
head(url, args) | 发送 HEAD 请求到指定 url |
patch(url, data, args) | 发送 PATCH 请求到指定 url |
post(url, data, json, args) | 发送 POST 请求到指定 url |
put(url, data, args) | 发送 PUT 请求到指定 url |
request(method, url, args) | 向指定的 url 发送指定的请求方法 |
2 请求返回信息
每次调用 requests 请求之后会返回一个 response 对象该对象包含了具体的响应信息。
响应信息如下
3 应用
requests发送http请求的结构如下。
1、通过页面开发者工具点击键盘F12或者空白处右击点击检查中的Network查看进行登录操作时提交的内容;
2、根据请求中的内容编写对应内容进行请求。
3.1 登录页面
def post(url, data=None, json=None, **kwargs):
r"""Sends a POST request.
:param url: URL for the new :class:`Request` object.
:param data: (optional) Dictionary, list of tuples, bytes, or file-like
object to send in the body of the :class:`Request`.
:param json: (optional) json data to send in the body of the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response <Response>` object
:rtype: requests.Response
"""
return request("post", url, data=data, json=json, **kwargs)
这里使用的是post方法body即网页中我们看到的payload中的内容headers即网页中Requests Headers中的内容。
Headers部分参数含义
(1) User-AgentMozilla/5.0 (平台) 引擎版本 浏览器版本号;
(2) Accept:可接受的内容类型;
(3) Host服务器的域名或IP地址如果不是通用端口还包含该端口号例如Host: www.some.com:182;
(4) Content-Length一个请求的请求体的内存长度单位为字节(byte)。请求体是指在HTTP头结束后两个CR-LF字符组之后的内容常见的有POST提交的表单数据这个Content-Length并不包含请求行和HTTP头的数据长度;
(5) ccept-Encoding浏览器可以处理的编码方式;
(6) ccept-Language浏览器接收的语言其实也就是用户在什么语言地区例如简体中文的就是 Accept-Language: zh-CN;
(7) Cache-Control这个指令在request和response中都有用来指示缓存系统服务器上的或者浏览器上的应该怎样处理缓存;
(8) Connection告诉服务器这个user agent通常就是浏览器想要使用怎样的连接方式。值有keep-alive和close。http1.1默认是keep-alive。keep-alive就是浏览器和服务器 的通信连接会被持续保存不会马上关闭而close就会在response后马上关闭。
其中content-type含义可以参考Content-Type 详解
def login_pon():
"""
登陆设备web页面
:return:响应信息
"""
login_url = 'http://192.168.XXX.XXX/XXX/XXX/formLogin'
headers = {
'Host': '192.168.XXX.XXX',
'Origin': 'http://192.168.XXX.XXX',
'Referer': 'http://192.168.XXX.XXX/wlbasic.asp?v=1673339477000',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/108.0.0.0 Safari/537.36',
}
body = {
'username': 'XXX',
'password': 'XXX'
}
res = requests.post(url=login_url, data=body, headers=headers)
if res.status_code == 200:
log.info("登录成功")
return res
3.2 退出登录
def logout():
"""
退出登录
:return:
"""
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,'
'application/signed-exchange;v=b3;q=0.9',
'Accept-Encoding': 'gzip,deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': '192.168.XXX.XXX',
'Referer': 'http://192.168.XXX.XXX/XXX/formLogout',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/108.0.0.0 Safari/537.36 '
}
url_logout = 'http://192.168.XXX.XXX/XXX/formLogout'
res_logout = requests.get(url=url_logout, headers=headers)
if res_logout.status_code == 200:
log.info("logout成功")
return res_logout
3.3 修改参数
def ssid_change(ssid):
"""
修改WiFi参数
"""
body = {
'band': '2',
'mode': '0',
'ssid': ssid,
...
}
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,'
'application/signed-exchange;v=b3;q=0.9',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'Content-Type': 'application/x-www-form-urlencoded',
'Host': '192.168.XXX.XXX',
'Origin': 'http://192.168.XXX.XXX',
'Referer': 'http://192.168.XXX.XXX/XXX',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/108.0.0.0 Safari/537.36',
}
url_change_mode = 'http://192.168.XXX.XXX/XXX/formWlanSetup'
return requests.post(url=url_change_mode, headers=headers, data=body)
3.4 上传文件
def import_file(srvUrl, file):
"""
上传文件
:param srvUrl: http://192.168.150.2:8000/api/v1.0/tickets/126126为对应工单ID
:param file: 要上传的文件名
:return:
"""
try:
header = {
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundarynX9ZcZCeJ4MKpx88',
'Cookie': 'XXX',
'Host': '192.168.XXX.XXX',
'Origin': 'http://192.168.XXX.XXX',
'Referer': 'http://192.168.XXX.XXX',
'User-Agent': 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome/108.0.0.0Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
body = {
'ModuleFeatureDecomposition': "[{\"url\":\"/XXX/XXX/XXX\",\"file_name\":\"XXX\"}]",
'SoftwareOverview': "[{\"url\":\"/XXX/XXX/XXX\",\"file_name\":\"XXX\"}]",
}
resp = requests.patch(url=srvUrl, headers=header, data=json.dumps(body))
print(resp.status_code)
if resp.status_code != requests.codes.ok:
return "error!"
name = os.path.basename(file)
with open(file, "rb") as conf: # rb mode读取二进制
upFile = {
'file': (name, conf)
}
resp = requests.patch(url=srvUrl, files=upFile)
print(resp.status_code)
except Exception as ex:
print(ex)