【问题标题】:Recording HTTP in Python with Scotch用 Scotch 在 Python 中记录 HTTP
【发布时间】:2013-06-14 03:41:52
【问题描述】:

我正在尝试使用库 scotch 记录浏览器发送的 HTTP GET/POST 请求。

我正在使用他们的示例代码:http://darcs.idyll.org/~t/projects/scotch/doc/recipes.html#id2

 import scotch.proxy
 app = scotch.proxy.ProxyApp()

 import scotch.recorder
 recorder = scotch.recorder.Recorder(app, verbosity=1)

 try:

     from wsgiref.simple_server import WSGIServer, WSGIRequestHandler

     server_address = ('', 8000)
     httpd = WSGIServer(server_address, WSGIRequestHandler)

     httpd.set_app(app)

     while 1:
        httpd.handle_request()

 finally:

    from cPickle import dump
    outfp = open('recording.pickle', 'w')
    dump(recorder.record_holder, outfp)
    outfp.close()

    print 'saved %d records' % (len(recorder.record_holder))

所以我运行了上面的代码,转到谷歌浏览器,并访问了一些网站,看看是否会被记录下来。

但是,我看不到代码应该如何终止。看来 httpd.handle_request() 中必须有错误才能终止代码。

我尝试了variation of the code,在其中删除了 try 和 finally 语法,并更改了 while 条件以使循环运行 30 秒。但是,这似乎也一直在运行。

关于如何使它工作的任何想法?我也愿意使用其他可用的 python 库来做我想做的事情:记录我的浏览器的 GET/POST 请求,包括登录,并在 python 中重放。

谢谢。

【问题讨论】:

  • 您是否更改了浏览器中的代理设置?你看到这段代码正在运行吗?
  • 嘿,我没有更改浏览器上的任何代理设置(我猜是因为没有相关说明)。我想我对这个库的工作方式缺乏了解。是的,代码根据状态栏在 pyscripter 上运行。任何帮助都会受到欢迎,或者在正确的方向上我可以阅读代理以及这一切是如何工作的。

标签: python http post get record


【解决方案1】:

如果我错了,请纠正我,但您正试图通过设置本地代理来记录本地浏览器的活动。如果是这种情况,您的浏览器需要通过您的代理才能让您的代理服务器记录活动。

您提供的代码在 localhost:8000 设置了一个代理服务器,因此您需要告诉您的浏览器这一点。实际设置取决于浏览器,我相信你可以很容易地谷歌它。

当我要求检查代码是否正在运行时,我实际上是指您的本地代理是否接受来自浏览器的某种请求。您是否在某个时候看到“已保存的记录”从您的代码中打印出来?

【讨论】:

  • 嘿亚历克斯,是的,你对我正在尝试做的事情是正确的。我将firefox的代理改为8000(工具->选项->高级->网络选项卡->设置)~screenshot。似乎代码卡在这一行:httpd.handle_request()。我猜是因为它在端口 8000 上没有看到任何活动?我重构了代码以使其更易于调试:pastebin.com/frSu0edL(这是我正在运行的 atm 并且它永远运行)。
  • 嘿,它有效!我为 HTTP 代理地址添加了 localhost 地址 127.0.0.1,并记录了我的一些活动。我敢肯定,摆弄我可以弄清楚其余的。非常感谢兄弟!我会赞成但没有足够的业力自动取款机。当我有能力时会投票。
猜你喜欢
  • 1970-01-01
  • 2021-12-08
  • 2021-10-22
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
相关资源
最近更新 更多