【发布时间】:2012-10-27 23:21:15
【问题描述】:
我正在尝试创建一个透明的 HTTP 代理。它的目的是停留在浏览器和 Web 服务器之间并且不可见。这是我正在使用的代码。不幸的是,它运行得不是很好。当我打开网页(由$base_uri 引用)时,会出现不同的结果,具体取决于我是仅使用浏览器打开它还是使用浏览器和代理打开它。我正在一个返回各种响应的网站上尝试它,包括“transfer-encoding: chunked”(所以我想问题可能出在哪里?!)。我认为 cookie 也可能存在问题,但我不知道如何解决它们(如果有的话......)。
#!/usr/bin/perl
use strict;
use HTTP::Daemon;
use LWP::UserAgent;
use HTTP::Cookies;
my $cookie_jar = HTTP::Cookies->new();
my $ua = LWP::UserAgent->new( max_redirect => 0, env_proxy => 0,keep_alive => 1, timeout => 30, agent => "Mozilla/4.76 [en] (Win98; U)");
my $d = HTTP::Daemon->new(
LocalHost => "localhost", # remove this to listen from other machines
# (i.e. open-relay... be careful of spammers!)
LocalPort => 33331
) || die;
print "[Proxy URL:", $d->url, "]\n";
fork(); fork(); fork(); # 2^3 = 8 processes
$ua->cookie_jar($cookie_jar);
my $base_uri = 'http://example.com/';
while (my $c = $d->accept) {
while (my $request = $c->get_request) {
my $uri = $base_uri . $request->uri->as_string();
my $method = $request->method;
my $req = HTTP::Request->new($method, $uri);
$request->uri($uri);
print "[[ $method >> $uri ]]\n";
my $response = $ua->simple_request($request);
$c->send_response( $response );
}
$c->close;
undef($c);
}
提前谢谢你!
【问题讨论】:
-
你真的需要代理吗?还是只想记录数据?在最后一种情况下使用像wireshark这样的嗅探器
-
@Schwern 你能推荐我吗?我需要与上面代码相同的功能,但没有我遇到的问题。感谢您的回复!
-
HTTP::Proxy 看起来它会做你想做的事。
-
如何设置要打开的url?