我曾经在JAVA中为我编写了一个简单的"爬虫"来下载http页面.现在,我正在尝试使用LWP模块将相同的内容重写为Perl.
这是我的Java代码(工作正常):
String referer = "http://example.com";
String url = "http://example.com/something/cgi-bin/something.cgi";
String params= "a=0&b=1";
HttpState initialState = new HttpState();
HttpClient httpclient = new HttpClient();
httpclient.setState(initialState);
httpclient.getParams().setCookiePolicy(CookiePolicy.NETSCAPE);
PostMethod postMethod = new PostMethod(url);
postMethod.addRequestHeader("Referer", referer);
postMethod.addRequestHeader("User-Agent", " Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13");
postMethod.addRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8");
postMethod.addRequestHeader("Content-Type", "application/x-www-form-urlencoded");
String length = String.valueOf(params.length());
postMethod.addRequestHeader("Content-Length", length);
postMethod.setRequestBody(params);
httpclient.executeMethod(postMethod);
这是Perl版本:
my $referer = "http://example.com/something/cgi-bin/something.cgi?module=A";
my $url = "http://example.com/something/cgi-bin/something.cgi";
my @headers = (
'User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; …
Run Code Online (Sandbox Code Playgroud) 我是新来的perl.在过去的几天里,我制作了一些简单的脚本,通过"get"将网站的源代码保存到我的电脑上.他们做他们应该做的事,但不会得到一个论坛的网站的内容.非论坛网站工作得很好.知道发生了什么事吗?这是问题块:
my $url = 'http://www.computerforum.com/';
my $content = get $url || die "Unable to get content";
Run Code Online (Sandbox Code Playgroud) 我的抓取工具的简单代码是:
#!/usr/bin/perl -w
use WWW::Scripter;
$w = new WWW::Scripter('agent' => 'myAgent');
$w->use_plugin('JavaScript');
### need to set a referrer header here ###
$w->get('http://website-url');
print $w->content, "\n";
Run Code Online (Sandbox Code Playgroud)
我需要在执行之前设置一个引用标头get
.或者我还需要设置其他标题,例如cookie等.我在文档中没有看到如何做到这一点.必须有一种方法,如何设置标题.怎么样?
这是代码部分,我试图使用LWP POST整个数组,但服务器只接收第一行数组(0索引)而其他人没有收到发送到服务器,请指导我做错了
$data_post[0] = "text1";
$data_post[1] = "text2";
$data_post[2] = "texxt3";
$data_post[3] = "text4";
$data_post[4] ="text5";
my $ua= LWP::UserAgent->new();
my $response = $ua->post( $url, { 'istring' => @data_post} );
my $content = $response->decoded_content();
my $cgi = CGI->new();
print $cgi->header(), $content;
Run Code Online (Sandbox Code Playgroud) 我正在使用LWP :: UserAgent请求大量页面内容.我已经知道我要求的网址的IP,所以我希望能够指定我请求的网址所在的IP地址,这样LWP就不必花时间进行dns查找.我查看了文档,但没有找到任何解决方案.有谁知道这样做的方法?谢谢!
@Steffen:我会检查脚本部分。我刚刚注意到 wget 命令现在服务 url 无法建立 SSL 连接
[root@XXXX rpms]# wget https://testuser:testpwd.service-now.com/u_incident_interface.do
--2018-06-10 13:00:07-- https://srv_SOAPimporterNagios:password@rwe.service-now.com/u_incident_interface.do
Resolving rwestproxy-neurathdc.rwe.com... 10.88.253.20
Connecting to rwestproxy-neurathdc.rwe.com|10.88.253.20|:8080... connected.
Unable to establish SSL connection.
[root@XXXX rpms]#
你能就 SSL 连接问题提出建议吗?
我工作中的网络人员正在应用升级和补丁,有时会导致我的 LWP 出现 http 状态 500 错误。
我有大约 50 个带有以下代码行的 Perl 应用程序。我不想每次安全协议更改时都更改所有 50 个应用程序,而是想使用一个变量。但是,我似乎无法找到将 LWP 分配给变量的正确方法。
当前有效的代码:
my $ua = LWP::UserAgent->new(ssl_opts =>{ verify_hostname => 0 });
Run Code Online (Sandbox Code Playgroud)
想要这样做,但不断出现错误:
my $lwp = "LWP::UserAgent->new(ssl_opts =>{ verify_hostname => 0 })";
my $ua = $lwp;
Run Code Online (Sandbox Code Playgroud)
我计划将 lwp 字符串放入文件或模块中,但出于说明目的对上述内容进行了编码。
非常感谢任何有关如何执行此操作的建议。
尝试过这些,但它们不起作用:
my $ua = <$LWP>;
my $ua = eval "\$$LWP";
my $ua = ${$LWP}; `
Run Code Online (Sandbox Code Playgroud)