问题标签 [lwp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
3634 浏览

perl - 为什么我不能使用 LWP::Simple 获取维基百科页面?

我正在尝试使用LWP::Simple获取维基百科页面,但它们没有回来。这段代码:

不打印任何东西。但是,如果我使用其他网页,比如说http://www.google.com,它可以正常工作。

我应该使用其他名称来引用维基百科页面吗?

这里会发生什么?

0 投票
4 回答
17113 浏览

perl - LWP::UserAgent 请求方法的真正超时

我正在尝试实现对不可靠服务器的请求。这个请求很好,但不是 100% 需要我的 perl 脚本成功完成。问题是服务器偶尔会死锁(我们正试图找出原因)并且请求永远不会成功。由于服务器认为它是活动的,它保持套接字连接打开,因此 LWP::UserAgent 的超时值对我们没有任何好处。对请求强制执行绝对超时的最佳方法是什么?

仅供参考,这不是 DNS 问题。死锁与同时访问我们的 Postgres 数据库的大量更新有关。出于测试目的,我们基本上在服务器响应处理程序中放置了一个 while(1) {} 行。

目前,代码如下所示:

我试过使用信号来触发超时,但这似乎不起作用。

我要使用的最终答案是离线某人提出的,但我会在这里提及。出于某种原因,SigAction 有效,而 $SIG(ALRM) 无效。仍然不确定为什么,但这已经过测试。这是两个工作版本:

0 投票
8 回答
88432 浏览

perl - 如何让 LWP 验证 SSL 服务器证书?

如何让LWP验证我要连接的服务器的证书是否由受信任的机构签署并颁发给正确的主机?据我所知,它甚至不检查证书是否声称是我要连接的主机名。这似乎是一个主要的安全漏洞(尤其是最近的 DNS 漏洞)。

更新: 原来我真正想要的是HTTPS_CA_DIR,因为我没有 ca-bundle.crt。但HTTPS_CA_DIR=/usr/share/ca-certificates/成功了。无论如何,我将答案标记为已接受,因为它足够接近。

更新 2:事实证明,HTTPS_CA_DIRHTTPS_CA_FILE当您使用 Net::SSL 作为底层 SSL 库时才适用。但是 LWP 也可以与 IO::Socket::SSL 一起使用,它会忽略这些环境变量并愉快地与任何服务器通信,无论它提供什么证书。有没有更通用的解决方案?

更新 3:不幸的是,解决方案仍然不完整。Net::SSL 和 IO::Socket::SSL 都没有根据证书检查主机名。这意味着某人可以获得某个域的合法证书,然后冒充任何其他域而 LWP 不会抱怨。

更新 4: LWP 6.00终于解决了这个问题。有关详细信息,请参阅我的答案

0 投票
3 回答
2485 浏览

perl - Compressing HTTP request with LWP, Apache, and mod_deflate

I have a client/server system that performs communication using XML transferred using HTTP requests and responses with the client using Perl's LWP and the server running Perl's CGI.pm through Apache. In addition the stream is encrypted using SSL with certificates for both the server and all clients.

This system works well, except that periodically the client needs to send really large amounts of data. An obvious solution would be to compress the data on the client side, send it over, and decompress it on the server. Rather than implement this myself, I was hoping to use Apache's mod_deflate's "Input Decompression" as described here.

The description warns:

If you evaluate the request body yourself, don't trust the Content-Length header! The Content-Length header reflects the length of the incoming data from the client and not the byte count of the decompressed data stream.

So if I provide a Content-Length value which matches the compressed data size, the data is truncated. This is because mod_deflate decompresses the stream, but CGI.pm only reads to the Content-Length limit.

Alternatively, if I try to outsmart it and override the Content-Length header with the decompressed data size, LWP complains and resets the value to the compressed length, leaving me with the same problem.

Finally, I attempted to hack the part of LWP which does the correction. The original code is:

And I changed the push line to:

Unfortunately this causes some problem where content (truncated or not) doesn't even get to my CGI script.

Has anyone made this work? I found this which does compression on a file before uploading, but not compressing a generic request.

0 投票
4 回答
6183 浏览

javascript - 如何使用 Perl 的 LWP 提取网站的 XML 并保存在文件中?

如何从网站 ( http://tv.yahoo.com/listings ) 中提取信息,然后从中创建 XML 文件?我想保存它以便稍后解析并使用 JavaScript 显示信息?

我对 Perl 很陌生,我不知道该怎么做。

0 投票
2 回答
10845 浏览

perl - 我可以强制 LWP::UserAgent 接受过期的 SSL 证书吗?

我想知道是否可以强制 LWP::UserAgent 接受单个知名服务器的过期 SSL 证书。中间的 Squid 代理使问题稍微复杂化。

我什至设置了一个调试环境,例如:

幸运的是,在我想出自己的解决方案之前,这个问题最终在远程服务器上得到了解决,但我希望能够在问题再次出现时有选择地规避问题(在我之前,底层服务已经中断了几个小时)被要求采取行动)。

如果存在这样的解决方案,我更倾向于 LWP::UserAgent 级别的解决方案,而不是基于底层 Crypt::SSLeay 或 openSSL 实现的解决方案,因为我不希望放松其他不相关应用程序的安全性。当然,在我丰富的空闲时间里,我自己仍在寻找这样的解决方案。

0 投票
1 回答
4903 浏览

perl - 如何使用 LWP::Simple 处理代理服务器?

如何向此脚本添加代理支持?

0 投票
4 回答
968 浏览

windows - 哪个存储库包含 LWP::Parallel::UserAgent?

我需要安装LWP::Parallel::UserAgent才能在 Windows 环境中运行,我使用的是 ActivePerl 5.10。我在谷歌上搜索,但没有找到关于这个包的 repo 的任何信息

0 投票
3 回答
2576 浏览

perl - 使用 WWW::Mechanize 透明地处理 GZip 编码的内容

我正在使用 WWW::Mechanize 并且当前Content-Encoding: gzip通过首先检查响应标头然后使用 IO::Uncompress::Gunzip 来获取未压缩的内容来处理我的代码中带有 ' ' 标头的 HTTP 响应。

但是,我想透明地执行此操作,以便 WWW::Mechanize 方法(如 form()、links() 等)可以处理并解析未压缩的内容。由于 WWW::Mechanize 是 LWP::UserAgent 的子类,因此我更喜欢使用LWP::UA::handlers来执行此操作。

虽然我已经部分成功(例如,我可以打印未压缩的内容),但我无法以我可以调用的方式透明地做到这一点

总而言之:我如何“替换” $mech 对象中的内容,以便从那时起,所有 WWW::Mechanize 方法都像 Content-Encoding 从未发生过一样工作?

感谢您的关注和帮助。谢谢

0 投票
2 回答
6353 浏览

perl - 为什么我用 Perl 的 LWP 下载的图像给了我错误大小的文件?

我正在尝试使用 Perl 从 HTTP 服务器获取图像。

我有文件的完整 URL 并尝试使用

现在,从逻辑上讲,至少对我来说,这应该可行。但是文件的大小略有不同,我不知道为什么。

帮助!