我正在使用 HTTP 分析器循环分析一个小型 LWP 用户代理,我注意到每次访问我的端口的 URL 都在不断变化。
虽然我在 VB.Net 中也制作了一个小脚本,httpwebrequest
并且在访问 URL 10 次时并没有改变我的端口号。
使用 perl 时是否可以保留静态 ip:port?
我正在使用 HTTP 分析器循环分析一个小型 LWP 用户代理,我注意到每次访问我的端口的 URL 都在不断变化。
虽然我在 VB.Net 中也制作了一个小脚本,httpwebrequest
并且在访问 URL 10 次时并没有改变我的端口号。
使用 perl 时是否可以保留静态 ip:port?
对于 HTTP 客户端:
use LWP::Protocol::http qw( );
@LWP::Protocol::http::EXTRA_SOCK_OPTS = (
LocalPort => $port,
);
如果您还想使用特定的界面,
@LWP::Protocol::http::EXTRA_SOCK_OPTS = (
LocalAddr => $ip,
LocalPort => $port,
);
当然,如果端口已在使用中,您可能会遇到问题,如果您只是将其用于另一个连接,则很可能会出现这种情况。
use LWP::Protocol::http qw( );
use LWP::UserAgent qw( );
my $port = 12456;
@LWP::Protocol::http::EXTRA_SOCK_OPTS = (
LocalPort => 12456,
);
my $ua = LWP::UserAgent->new();
print $ua->get('http://www.example.com/show_port')->content for 1..2;
输出:
>script.pl
12456
Can't connect to www.example.com:80 (10048)
LWP::Protocol::http::Socket: connect: 10048 at .../LWP/Protocol/http.pm line 51.
>perl -E"say $^E=10048"
Only one usage of each socket address (protocol/network address/port) is normally permitted
更有可能的是,端口没有被重用,连接被重用。keep_alive => 1
您还可以尝试通过传递给 LWP::UserAgent 构造函数来重用连接。
use LWP::UserAgent qw( );
my $ua = LWP::UserAgent->new( keep_alive => 1 );
print $ua->get('http://www.example.com/show_port')->content for 1..2;
输出:
57842
57842