吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1431|回复: 14
收起左侧

[求助] 如何通过创建本地proxy获取http(s)的headers

  [复制链接]
Glenn 发表于 2022-9-5 11:56
有没有大佬用过代{过}{滤}理的模块, 我想实现用Python创建一个本地代{过}{滤}理,浏览器刷新网页,然后python抓取这些请求的 url 和 headers。我试过 proxy.py 模块,成功创建了代{过}{滤}理,但是日志是自动打印的还有些延迟,而且日志中没有包含headers信息。。就很难受。有没有啥好用的本地代{过}{滤}理模块可以获取headers的推荐一下。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
FchiyuT + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Glenn 发表于 2022-9-5 12:52
hecoter 发表于 2022-9-5 12:24
考虑Python抓包工具吧 mitmproxy

mitmproxy 似乎需要用命令行去启动,属于用mitmproxy 执行python,而且不是python去执mitmproxy。我需要在我的其他代码中偶尔执行下代{过}{滤}理功能。
慕星月 发表于 2022-9-5 15:08
 楼主| Glenn 发表于 2022-9-5 17:37
慕星月 发表于 2022-9-5 15:08
selenium?还是你就想自己写一个代{过}{滤}理

创建本地代{过}{滤}理去获取浏览器的请求,不是通过selenium
Mahone1 发表于 2022-9-5 17:58
用抓包工具呗,网上一大堆这种吧
 楼主| Glenn 发表于 2022-9-5 18:10
Mahone1 发表于 2022-9-5 17:58
用抓包工具呗,网上一大堆这种吧

我需要在python中实现
lili95 发表于 2022-9-5 23:44
路过看看 。。。。
mlj0381 发表于 2022-9-6 08:27
可以考虑 browsermobproxy 应该能满足你的需求
 楼主| Glenn 发表于 2022-9-6 11:17
本帖最后由 Glenn 于 2022-9-6 11:20 编辑

已用5.2版本的mitmproxy  解决。附上代码:
# -*-coding:utf-8-*-

import time
import queue
from multiprocessing import Process, freeze_support, Queue
from mitmproxy import proxy, options
from mitmproxy.http import HTTPFlow
from mitmproxy.tools.dump import DumpMaster
import sys

class Handler:
    """
    将请求加入队列
    """
    def __init__(self, req_queue: Queue):
        self.req_queue = req_queue

    def request(self, flow: HTTPFlow):
        request_dict = {
            "method": flow.request.method,
            "url": flow.request.url,
            "headers": [(key, flow.request.headers[key]) for key in flow.request.headers],
            "cookies": [(key, flow.request.cookies[key]) for key in flow.request.cookies],
            "data": flow.request.text
        }
        try:
            print(request_dict.get("url"))
            print(request_dict.get("headers"))
            self.req_queue.put(request_dict, timeout=2)
        except queue.Full as e:
            print(e)

    def response(self, flow: HTTPFlow):
        pass

    def responseheaders(self, flow: HTTPFlow):
       pass


def do_start_proxy(req_queue):
    opts = options.Options(listen_host="127.0.0.1", listen_port=8888, ssl_insecure=True)

    m = DumpMaster(opts, with_termlog=False, with_dumper=False)

    pconf = proxy.config.ProxyConfig(opts)
    m.server = proxy.server.ProxyServer(pconf)
    m.addons.add(Handler(req_queue))

    print("Proxy server listening at http://127.0.0.1:8888")
    m.run()  # 启动后就在这里循环
    m.shutdown()


def start_proxy(req_queue):
    freeze_support()
    p = Process(target=do_start_proxy, args=(req_queue, ))
    p.start()
    return p


if __name__ == "__main__":
    req_queue = Queue(6000)
    p = start_proxy(req_queue)
    try:
        while True:
            time.sleep(10)
            break
    except KeyboardInterrupt:
        p.terminate()
sk8820 发表于 2022-9-6 11:29
Glenn 发表于 2022-9-6 11:17
已用5.2版本的mitmproxy  解决。附上代码:
# -*-coding:utf-8-*-

你好,请问下,如果是本地电脑上,接收指定端口的信息,接收到的信息保存在本地,比如放到一TXT文本文件中,可以用你这个代码吗?python小白一个。诚心请教。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表