simple http proxy
发布时间:2020-12-15 21:10:44 所属栏目:大数据 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #!env perluse AnyEvent::Socket;use AnyEvent::Handle;use Data::Dumper;use LWP;my $cv = AnyEvent-condvar;my $clients={};my $forwords={};sub pr
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 #!env perl use AnyEvent::Socket; use AnyEvent::Handle; use Data::Dumper; use LWP; my $cv = AnyEvent->condvar; my $clients={}; my $forwords={}; sub proxy_get_cb { my ($fh,$lines,$req_handle) = @_; my $f_hdl = new AnyEvent::Handle fh => $fh,no_delay => 1,on_eof => sub { my $hdl=shift; delete $forwards->{$hdl->fh->fileno}; $hdl->destroy; },on_error => sub { my $hdl=shift; delete $forwards->{$hdl->fh->fileno}; $hdl->destroy; }; $forwards->{fileno($fh)} = $f_hdl; $f_hdl->push_write($lines."rnrn"); $f_hdl->on_read(sub{ my ($handle) = @_; $req_handle->push_write($handle->{rbuf}); $handle->{rbuf}=undef; }); } sub get_req { my ($hdl,$lines) = @_; my @headers = split /[rn]+/,$lines; my ($method,$url) = ($headers[0] =~ m{(w+)s+([^s]+)s}); print "method = $method,url=$urln"; my $port = 80; if ( my ($host) = ($url =~ m{http://([^/]+)}i) ) { ($host,$port) = split /:/,$host; $port = 80 unless $port; $headers[0] =~ s{http://[^/]+}{}; #print "host:$host,port=$portn"; #proxy_get($host,$port,$hdl); tcp_connect $host,sub { my $fh = shift; my $h=join("rn",@headers); proxy_get_cb($fh,$h,$hdl); }; #wait for next req $hdl->push_read(line=>"rnrn",&;get_req); } else { syswrite $hdl->fh,"HTTP/1.0 200rnServer: mini_httprnContent-Length:5rnrndonen"; delete $clients->{fileno($fh)}; $hdl->destroy; } } tcp_server undef,7070,sub { my ($fh,$host,$port) = @_; print "client is from:$host:$portn"; my $hdl = new AnyEvent::Handle fh => $fh,timeout =>5,on_error => sub { print STDERR "client disconnect for errorn"; my $hdl=shift; delete $clients->{$hdl->fh->fileno}; $hdl->destroy; },on_eof => sub { print STDERR "client disconnectn"; my $hdl=shift; delete $clients->{$hdl->fh->fileno}; $hdl->destroy; }; $hdl->push_read( line => "rnrn",&;get_req); $clients->{fileno($fh)}=$hdl; }; $cv->recv; 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |