Python requests_raw库介绍及使用(mitmproxy)

目录

介绍

安装

mitmproxy安装

requests与requests_raw库区别

特别函数介绍

使用示例


介绍

使用请求发送HTTP原始套接字,很明显看上去可以直接使用 bp 请求信息使用。

显式

import json
import requests_raw

req = b"GET /get HTTP/1.1\r\nHost: httpbin.org\r\n\r\n"
res = requests_raw.raw(url='http://httpbin.org/', data=req)
res_json = res.json()
print(json.dumps(res_json, indent=2))

隐式

import json
import requests
import requests_raw
requests_raw.monkey_patch_all()

req = b"GET /cookies/set/name/value HTTP/1.1\r\nHost: httpbin.org\r\n\r\n"
session = requests.Session()
res = session.raw(url='https://httpbin.org/', data=req)
res_json = res.json()
print(json.dumps(res_json, indent=2))

安装

pip3 install requests-raw

mitmproxy安装

https://mohen.blog.csdn.net/article/details/135818038 

requests与requests_raw库区别

requests 和 requests_raw 都是 Python 中常用的 HTTP 客户端库,用于发送 HTTP 请求。它们的区别如下:

  1. 功能和用途:requests 是 Python 社区中最常用的 HTTP 客户端库之一,提供了简洁和易用的 API,用于发送 HTTP 请求并处理响应。它具有许多高级功能,如会话管理、自动重定向、认证、代理支持、文件上传和下载等。requests 适用于大多数常见的 HTTP 请求和响应场景。

    requests_raw 则是一个相对较简单的库,专注于提供原始的、底层的 HTTP 请求和响应操作。它更接近于 HTTP 协议的底层操作,提供了对请求和响应的原始访问和控制。相比于 requestsrequests_raw 更适合处理一些特殊的、非常定制化的 HTTP 请求和响应需求。

  2. API 设计:requests 提供了一组易用且高级的 API,例如 get()post()put() 等方法,以及许多用于设置请求参数、请求头、代理、认证等的选项。这些 API 隐藏了底层的细节,使得发送 HTTP 请求和处理响应变得简单和直观。

    requests_raw 则提供了更底层的 API,例如 request() 方法,它允许你直接设置请求头、请求体、URL、HTTP 方法等。你需要更多地了解 HTTP 协议的细节,并手动构造和解析请求和响应。

  3. 依赖和兼容性:requests 是一个独立的库,可以直接通过 pip install requests 安装。它在 Python 2.7、3.4+ 版本上都有良好的兼容性,并且不依赖于其他第三方库。

    requests_raw 则是 mitmproxy(中间人代理工具)库中的一个子模块,用于处理底层的 HTTP 请求和响应。如果你想使用 requests_raw,需要安装并导入 mitmproxy 库,它是一个专门用于拦截和修改网络请求的工具。

特别函数介绍

1. assemble_request

assemble_request 函数是 mitmproxy 中的一个内部函数,用于将各个部分的数据组装成一个完整的 HTTP 请求。它接受以下参数:

  • method:请求方法,例如 "GET"、"POST" 等。
  • scheme:请求协议,例如 "http"、"https"。
  • host:请求的主机名。
  • port:请求的端口号。
  • path:请求的路径。
  • http_version:HTTP 版本,默认为 "HTTP/1.1"。
  • headers:请求头部,一个字典类型。
  • content:请求体内容,一个字节串。
from mitmproxy.net.http.http1.assemble import assemble_request

method = "GET"
scheme = "http"
host = "www.example.com"
port = 80
path = "/path"
headers = {
    "User-Agent": "Mozilla/5.0",
}

request_bytes = assemble_request(method, scheme, host, port, path, headers=headers)

print(request_bytes.decode())  # 输出组装后的请求

结果

GET /path HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0

使用示例

from mitmproxy.net.http.http1.assemble import assemble_request
import requests_raw

method = "GET"
scheme = "http"
host = "www.example.com"
port = 80
path = "/path"
headers = {
    "User-Agent": "Mozilla/5.0",
}

#request_bytes = assemble_request(method, scheme, host, port, path, headers=headers).decode()
request_bytes = assemble_request(method, scheme, host, port, path, headers=headers).decode("utf-8")

r = requests_raw.raw(url=url, data=request_bytes.encode(), verify=False)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨痕诉清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值