基于Web安全的Python编程(1)

目录

一、http协议基础知识介绍

1、http协议分类

2、请求方法

3、什么是URL

4、请求头

5、响应状态码

二、常用Python库、函数、操作

三、http常用请求方法

1、不带参请求

2、带参数请求(get和post存在细微区别)

四、http响应属性获取

1、获取状态码

2、获取响应文本

3、获取响应头和请求头

4、获取请求url和cookie

5、修改请求头


一、http协议基础知识介绍

1、http协议分类

http 1.0   一次一个连接;http 1.1 多次可以一个连接(都是明文传输,不安全,默认都在80端口)

https (加密传输,更安全,默认在443端口)

2、请求方法

http 1.0:get,post,head

http 1.1:支持文件上传与删除等更多的方法(put,delete,trace,patch)

3、什么是URL

url:协议://主机名.域名/文件夹/文件?参数=值

比如:https://www.baidu.com/xxx/xx?id=1

4、请求头

user-agent:浏览器版本信息

accept-encoding:浏览器接受的编码

referer:当前网页从哪里跳转过来的

cookie:cookie信息

location:跳转到哪里

set-cookie:设置cookie信息(响应头)

www-Authenticate:用于身份验证(http basic等)

5、响应状态码

1xx:信息提示

2xx:成功

3xx:重定向

4xx:客户端错误

5xx:服务端错误

二、常用Python库、函数、操作

1、必须装的一个库:requests

使用前需要先导入该库:import requests

2、常用函数

str():将结果转为字符串

strip():去除空行

print():输出

3、常用操作

选中 ctrl+/:多行注释

使用+:连接字符串

三、http常用请求方法

1、不带参请求

这个比较简单,直接调用get或者post函数传入url即可

用法:

requests.get(url)
requests.post(url)

定义一个变量r,用来接收我们的请求

使用 r.url 可以获取请求的url(这个我们后面会细讲)

以get为例,测试代码:

import requestsurl = "https://www.baidu.com"
r = requests.get(url)
print(r.url)

运行结果: 

 

2、带参数请求(get和post存在细微区别)

用法:

requests.get(url,params={"key1":"value1","key2":"value2",...}) #get方式请求
requests.get(url,data={"key1":"value1","key2":"value2",...}) #post方式请求

这里要注意下:除了传入url,还需要传入params或者data,传入的参数名和值使用大括号包裹;

参数名与值之间使用冒号,每组参数间使用逗号分割;

参数名和值都需要用单引号或者双引号引起来。(Python中单引号和双引号效果相同)

为了方便,我们一般会定义一个payload,然后再将这个payload传给params

这里找了个网站给大家演示一下:

抓包之后发现是post请求

测试代码:

import requestsurl = "http://node4.anna.nssctf.cn:28150/admin.php?m=user&f=login"
payload = {"account":"admin","password":"900af8acf068e543e2f3f406d5407043"}
r = requests.get(url,data=payload)
print(r.url)
print(r.status_code)
print(r.text)

其中的密码传入后会进行编码,这里直接传入编码后的内容

三个print函数,分别输出请求的url,响应状态码,网页源代码(在后面会细讲)

运行结果:

四、http响应属性获取

1、获取状态码

用法:

r.status_code

测试代码: 

import requestsurl1 = "https://www.baidu.com"
r1 = requests.get(url1)
print(r1.status_code)url2 = "https://baidu.com/vavgaeg"
r2 = requests.get(url2)
print(r2.status_code)

运行结果: 

访问存在的页面,返回状态吗:200

访问不存在的页面,返回状态码:404 

2、获取响应文本

用法:

r.content #返回二进制数据
r.text #返回源代码

测试代码:

import requestsurl = "https://www.baidu.com"
r = requests.get(url)
print(r.content)
print("*"*60) #用于分割输出结果
print(r.text)

运行结果:

可以看到上半部分是网页的二进制数据,下半部分是网页的源代码

3、获取响应头和请求头

用法:

r.headers #获取响应头
r.request.headers #获取请求头

 测试代码:

import requestsurl = "https://www.baidu.com"
r = requests.get(url)
print(r.headers) #获取响应头
print("*"*160)
print(r.request.headers) #获取请求头

运行结果:

可以看到上半部分是响应头,下半部分是请求头

4、获取请求url和cookie

用法:

r.url #获取请求url
r.cookies #获取cookie

测试代码:

import requestsurl = "https://www.baidu.com"
r = requests.get(url)
print(r.url)
print("*"*100)
print(r.cookies)

运行结果:

可以看到上半部分是我们请求的url,下半部分是cookie的相关信息

5、修改请求头

用法:

headers={"User-Agent":"XXX"} #XXX为我们想要设置的内容

测试代码:

import requests
url = "https://www.baidu.com"
r=requests.get(url)
print(r.request.headers)
headers={"User-Agent":"kali_Myon"}
r=requests.get(url,headers=headers)
print(r.request.headers)

运行结果:

这里分别输出了修改前和修改后的请求头 

后续会继续更新Python在Web安全领域的编程,以及关于常见web扫描工具的脚本编写

创作不易,喜欢的可以点赞关注支持一下,我是Myon,我们下期再见!

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

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

相关文章

计算机网络(六):应用层

参考引用 计算机网络微课堂-湖科大教书匠计算机网络(第7版)-谢希仁 1. 应用层概述 应用层是计算机网络体系结构的最顶层,是设计和建立计算机网络的最终目的,也是计算机网络中发展最快的部分 早期基于文本的应用 (电子邮件、远程登…

分布式架构篇

1、微服务 微服务架构风格,就像是把一个单独的应用程序开发为一套小服务,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是 HTTP API。这些服务围绕业务能力来构建,并通过完全自动化部署机制来独立部署。这些…

Spring 原理

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 1 Spring 特点 轻量级控制反转面向切面容器框架集合 2 Spring 核心组件 3 Spring 常用模块 4 Spring 主要包 5 Spring 常用注解 bean…

第十七章:Java连接数据库jdbc(java和myql数据库连接)

1.进入命令行:输入cmd,以管理员身份运行 windowsr 2.登录mysql 3.创建库和表 4.使用Java命令查询数据库操作 添加包 导入包的快捷键 选择第四个 找到包的位置 导入成功 创建java项目 二:连接数据库: 第一步:注册驱动…

设计模式 - 策略模式

目录 一. 前言 二. 实现 一. 前言 策略模式 (Strategy Pattern) 是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。此模式让算法的变化独立于使用算法的客户。 与状态模式的比较 状态模式的类图和策略模式类似,并…

VUE3照本宣科——内置指令与自定义指令及插槽

VUE3照本宣科——内置指令与自定义指令及插槽 前言一、内置指令1.v-text2.v-html3.v-show4.v-if5.v-else6.v-else-if7.v-for8.v-on9.v-bind10.v-model11.v-slot12.v-pre13.v-once14.v-memo15.v-cloak 二、自定义指令三、插槽1.v-slot2.useSlots3.defineSlots() 前言 &#x1f…

Windows下启动freeRDP并自适应远端桌面大小

几个二进制文件 xfreerdp # Linux下的,an X11 Remote Desktop Protocol (RDP) client which is part of the FreeRDP project wfreerdp.exe # Windows下的,freerdp2.0 主程序,freerdp3.0将废弃 sdl-freerdp.exe # Windows下的&…

【AI视野·今日NLP 自然语言处理论文速览 第四十三期】Thu, 28 Sep 2023

AI视野今日CS.NLP 自然语言处理论文速览 Thu, 28 Sep 2023 Totally 38 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Cross-Modal Multi-Tasking for Speech-to-Text Translation via Hard Parameter Sharing Authors Brian Yan,…

STM32CubeMX学习笔记-USB接口使用(CDC虚拟串口)

STM32CubeMX学习笔记-USB接口使用(CDC虚拟串口) 一、USB简介二、新建工程1. 打开 STM32CubeMX 软件,点击“新建工程”2. 选择 MCU 和封装3. 配置时钟4. 配置调试模式 三、USB3.1 参数配置3.3 配置时钟3.4 USB Device 四、生成代码五、查看端口…

MySQL5.7版本与8.0版本在Ubuntu(WSL环境)系统安装

目录 前提条件 1. MySQL5.7版本在Ubuntu(WSL环境)系统安装 1. 1 下载apt仓库文件 1.2 配置apt仓库 1.3 更新apt仓库的信息 1.4 检查是否成功配置MySQL5.7的仓库 5. 安装MySQL5.7 1.6 启动MySQL 1.7 对MySQL进行初始化 1.7.1 输入密码 …

Lucene学习总结之Lucene的索引文件格式

当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程。Lucene的搜索过程,就是按照此文件格式将索引进去的信息读出来,然后计算每篇文档打…

数据结构 2.1 线性表的定义和基本操作

数据结构三要素——逻辑结构、数据的运算、存储结构(物理结构) 线性表的逻辑结构 线性表是具有相同数据类型的n(n>0)个数据元素的有限序列,其中n为表长,当n0时,线性表是一个空表。 每个数…

单层神经网络

神经网络 人工神经网络(Artificial Neural Network,ANN),简称神经网络(Neural Network,NN),是一种模仿生物神经网络的结构和功能的数学模型或计算模型。1943年,McCulloc…

SpringMVC(二)@RequestMapping注解

我们先新建一个Module。 我们的依赖如下所示&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaL…

uni-app:获取元素宽高

效果 代码 这里我定义的宽为500px,高为200排序,控制台输出的结果是502,202。原因是我设置了上下左右宽度各为1px的border边框导致 核心代码分析 // const query uni.createSelectorQuery();表示创建了一个选择器查询实例。通过这个实例&#xff0c;你可以使用不同的方法来选择…

实验3.2 分期付款计算器

目录 实验目的‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬ 实验内容‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬…

Android LitePal byte[]类型字段不被创建

我创建了以下实体类&#xff0c;主要是用户分享的内容、分享的照片、分享的标题&#xff0c;然后百度了一下LitePal可以识别byte[]&#xff0c;因为需要文件的上传与读取&#xff1a; public class Context extends LitePalSupport {private Integer ContextId;private String…

一文拿捏Spring事务之、ACID、隔离级别、失效场景

1.&#x1f31f;Spring事务 1.编程式事务 事务管理代码嵌入嵌入到业务代码中&#xff0c;来控制事务的提交和回滚&#xff0c;例如TransactionManager 2.声明式事务 使用aop对方法前后进行拦截&#xff0c;然后在目标方法开始之前创建或者加入一个事务&#xff0c;执行完目…

设计模式12、代理模式 Proxy

解释说明&#xff1a;代理模式&#xff08;Proxy Pattern&#xff09;为其他对象提供了一种代理&#xff0c;以控制对这个对象的访问。在某些情况下&#xff0c;一个对象不适合或者不能直接引用另一个对象&#xff0c;而代理对象可以在客户端和目标对象之间起到中介的作用。 抽…

【2023年11月第四版教材】第18章《项目绩效域》(第一部分)

第18章《项目绩效域》&#xff08;第一部分&#xff09; 1 章节内容2 干系人绩效域2.1 绩效要点2.2 执行效果检查2.3 与其他绩效域的相互作用 3 团队绩效域3.1 绩效要点3.2 与其他绩效域的相互作用3.3 执行效果检查3.4 开发方法和生命周期绩效域 4 绩效要点4.1 与其他绩效域的相…