requests页面常用操作(post、put、get、head、patch、delete方法)

news2024/11/27 1:25:01

      • 1 requests主要方法
      • 2 请求返回信息
      • 3 应用
        • 3.1 登录页面
        • 3.2 退出登录
        • 3.3 修改参数
        • 3.4 上传文件

  Requests 是一个 Python 的 HTTP 客户端库。
  每次调用 requests 请求之后,会返回一个 response 对象,该对象包含了具体的响应信息。可以通过requests模拟提交请求来操作web页面。
例:

import requests

# 发送请求
response = requests.get('https://www.runoob.com/')

# 返回网页内容
print(response.text)

在这里插入图片描述

1 requests主要方法

delete(url, args) 向网页提交删除请求
get(url, params, args) 获取html网页的主要方法
head(url, args) 获取html网页头信息
patch(url, data, args)向html网页提交局部修改请求
post(url, data, json, args) 向网页提交post请求
put(url, data, args)向网页提交put请求
request(method, url, args)构造一个请求,支撑其他各种方法的基础方法

post、put和patch的区别:
(1) POST方法请求的目标是一个行为处理器 ,重复进行POST方法会导致多条相同的数据被创建。虽然多次执行结果不是相同的,但其实这些数据除了自增的id不同以外,其他部分的数据都是相同的;
(2) 新增数据应该使用POST,修改现有数据应该使用PUT;
(3) PATCH方法是新引入的,是对PUT方法的补充,用来对已知资源进行局部更新。即PUT是修改了整条记录,不变的字段也重写,而PATCH只是单独修改一个字段。

2 请求返回信息

  每次调用 requests 请求之后,会返回一个 response 对象,该对象包含了具体的响应信息。
响应信息如下:
在这里插入图片描述

3 应用

  requests发送http请求的结构如下。
在这里插入图片描述
1、通过页面开发者工具(点击键盘F12或者空白处右击点击检查)中的Network,查看进行登录操作时提交的内容;
2、根据请求中的内容编写对应内容进行请求。
请添加图片描述
请添加图片描述
Headers部分参数含义:
(1) User-Agent:Mozilla/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 详解

3.1 登录页面

  使用的是post方法,body即网页中我们看到的payload中的内容,headers即网页中Requests Headers中的内容。

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)
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 退出登录

  使用的get方法,get方法的参数放在头中,与post放在body中不同。

    def get(self, url, **kwargs):
        r"""Sends a GET request. Returns :class:`Response` object.

        :param url: URL for the new :class:`Request` object.
        :param \*\*kwargs: Optional arguments that ``request`` takes.
        :rtype: requests.Response
        """

        kwargs.setdefault("allow_redirects", True)
        return self.request("GET", url, **kwargs)

在这里插入图片描述

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 上传文件

  使用的patch方法。
  PUT方法的实体无结构的,它直接把实体部分的数据替换到服务器的资源上。而PATCH提供的实体则需要根据程序或其它协议的定义,解析后在服务器上执行,以此来修改服务器上的数据。

def import_file(srvUrl, file):
    """
    上传文件
    :param srvUrl: http://192.168.150.XXX/XXX
    :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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/167051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯 stm32 实现 ADC 采集数据功能 CubeMX

文章内的代码使用 HAL 库。 ADC 即 模数转换器&#xff0c;是指 将 连续变化的模拟信号 转换成 离散的数字信号 的器件。 文章目录前言一、ADC 原理图二、CubeMX 配置三、ADC 代码讲解总结前言 一、ADC 原理图 从原理图我们可以看到 STM32G431 内部集成 两个 最高位 12 位 的 A…

通信电子、嵌入式类面试题刷题计划03

文章目录021——"Hello, world!"022——计算圆的面积023——打印10x10的星号024——字符串打印025——打印26个英文字母026——strlen函数的用法027——sizeof函数的使用028——if else、变量赋值语句029——if else语句030——if elseif else语句&#xff0c;判断是…

数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 ( 七)求两个数的差值

数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 &#xff08;七&#xff09;求两个数的差值 &#x1f508;声明&#xff1a; &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN博客 &#x1f9e8;未经作者允许&#xff0c;禁止转载 &#x1f511;系列专栏&#xff1a;牛客Ve…

Redis作为缓存应用场景分析

为什么使用缓存 Redis是一个内存型数据库&#xff0c;也就是说&#xff0c;所有的数据都会存在与内存中&#xff0c;基于Redis的高性能特性&#xff0c;我们将Redis用在缓存场景非常广泛。使用起来方便&#xff0c;响应也是远超关系型数据库。 应用场景 Redis的应用场景非常…

绝了,超越YOLOv7、v8,YOLOv6 v3.0正式发布

超越YOLOv7、v8! YOLOv6 v3.0正式发布!!! YOLOv6 全新版本v3.0正式发布&#xff01;引入新的网络架构和训练方案&#xff0c;其中YOLOv6-S以484 FPS的速度达到45.0% AP&#xff0c;超过YOLOv5-S、YOLOv8-S&#xff0c;其代码刚刚开源 由于前段时间Ultralytics公司透露出V8的发…

马哥架构第2周课程作业

haproxy、nginx、lvs负责均衡相关的话题一. nginx和haproxy的异同点二. 实现haproxy四层地址透传&#xff0c;并且做基于cookie的会话保持2.1 haproxy四层地址透传2.2 基于cookie的会话保持2.2.1 配置选项2.2.2 配置示例2.2.3 验证 Cookie 信息三. 实现自定义错误页面和https的…

【学习笔记】【Pytorch】12.损失函数与反向传播

【学习笔记】【Pytorch】12.损失函数与反向传播一、损失函数的介绍1.L1Loss类的使用代码实现2.MSELoss类的使用3.损失函数在模型中的实现二、反向传播一、损失函数的介绍 参考&#xff1a; 损失函数&#xff08;loss function&#xff09; pytorch loss-functions 文档 作用&…

【JavaEE】基于TCP的客户端服务器程序

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01;✨ &#x1f6f0;️&#x1f6f0;️系列专栏:【JavaEE】 ✈️✈️本篇内容:基于TCP的客户端服务器程序。 &#x1f680;&#x1f680;代码存放仓库gitee&#xff1a;JavaEE初阶代码存放&#xff01; ⛵⛵作者…

【JavaEE初阶】第二节.进程篇

文章目录 前言 一、操作系统 二、进程 2.1 进程的概念 2.2 进程的管理​​​​​​​​​​​​​​ 2.3 PCB 2.3.1 PCB里面的一些属性 2.3.2 进程的调度 2.3.3 进程的虚拟地址空间 2.3.4 进程间通信 总结 前言 本节内容我们继续对JavaEE的有关内容进行学习&#xff0c;…

汽车智能化,集度做加法

CES2023刚刚落下帷幕&#xff0c;这场名为“国际消费电子展”的业界盛会&#xff0c;近几年重心正明显转向智能汽车及其周边产业链。在2022年的CES上&#xff0c;集度与英伟达宣布合作&#xff0c;也透露了智能汽车研发的相关计划。而在本届CES之前、2022年末的广州车展上&…

一个关于image访问图片跨域的问题

一、背景 项目中遇到一个问题&#xff0c;同一个图片在 dom 节点中使用了 img 标签来加载&#xff0c;同时由于项目使用了 ThreeJS 3D 渲染引擎&#xff0c;在加载纹理时使用了 TextureLoader 来加载了同一张图片&#xff0c;而由于图片是在阿里云服务器上的&#xff0c;所以最…

SourceTree 拉取、重置提交、回滚、变基与合并

SourceTree的重置当前分支到此次提交 使用场景&#xff1a;“我想把已提交未推送的修改撤销” 使用模式说明软合并软合并是指将此次提交回滚到指定提交位置&#xff0c;但这个过程中会将修改过的文件暂存到暂存区。混合合并混合合并是指将此次提交回滚到指定的位置&#xff0c…

本来挺喜欢刷《剑指offer》的.......(第十一天)

跟着博主一起刷题 这里使用的是题库&#xff1a; https://leetcode.cn/problem-list/xb9nqhhg/?page1 目录剑指 Offer 66. 构建乘积数组剑指 Offer 68 - I. 二叉搜索树的最近公共祖先剑指 Offer 68 - II. 二叉树的最近公共祖先剑指 Offer 66. 构建乘积数组 剑指 Offer 66. 构建…

使用react-bmapgl绘制区域并判断是否重叠

需求如下&#xff1a; 在react项目中使用百度地图实现区域&#xff08;电子围栏&#xff09;的绘制绘制的区域类型为&#xff1a;1、多边形 2、圆形可绘制多个区域区域不能有重叠可重新编辑区域 代码如下: index.tsx import { useCallback, useEffect, useState } from rea…

Python入门实践(二)——变量的使用

文章目录变量1、变量的命名和使用1.1、避免命名错误2、字符串2.1、修改字符串大小写2.2、合并&#xff08;拼接&#xff09;字符串2.3、使用制表符或换行符来添加空白2.4、删除空白3、数字3.1、整数3.2、浮点数3.3、使用str()避免类型错误4、注释变量是对一种数据结构的命名&am…

2023年基建工程(设计规划施工)经验分享,超多干货

为了彻底打通从工程外业勘探调查、数据资料整理&#xff0c;到内业详细设计之间的一系列障碍&#xff0c;结合工程外业调查的特点&#xff0c;基于安卓&#xff08;Android&#xff09;操作系统&#xff0c;精心打磨推出了“外业精灵”移动端应用软件。 该系统把工程外业探勘、…

MPP数据库简介及架构分析

目录什么是MPP&#xff1f;特性并行处理超大规模数据仓库真正适合什么典型的分析工作量数据集中化线性可伸缩性MPP架构技术特性数据库架构分析Shared EverythingShared DiskShare MemoryShared NothingShared Nothing数据库架构优势什么是MPP&#xff1f; MPP (Massively Paral…

分享88个C源码,总有一款适合您

C源码 分享88个C源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载后可以看到。 源码下载链接&#xff1a;https://pan.baidu.com/s/1TT87gt66kn5BtLqgRUTlUQ?pwdwje5 提取码…

Java图形化界面---JOptionPane

目录 一、JOptionPane的介绍 二、JOptionalPane的使用 &#xff08;1&#xff09;消息对话框 &#xff08;2&#xff09; 确认对话框 &#xff08;3&#xff09;输入对话框 &#xff08;4&#xff09;选项对话框 一、JOptionPane的介绍 通过JOptionPane可以非常方便地创建…

SpringCloud复习之Sleuth+Zipkin链路追踪实战

文章目录写作背景为什么要有链路监控SpringCloud SleuthZipkin能做什么上手实战启动一个Zipkin Server微服务集成SleuthZipkin写作背景 前面复习了SpringCloud Netflix的几个核心组件&#xff0c;包括Eureka、Ribbon、Feign、Hystrix、Zuul&#xff0c;并进行了Demo级别的实战…