问题标签 [lwp-useragent]

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 投票
2 回答
1073 浏览

perl - 如何在 perl 中强制执行明确的超时?

我正在使用 LWP 从网页下载内容,我想限制它等待页面的时间。

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

每当超时达到其限制时,它就会死掉,我无法继续使用脚本!整个脚本处于一个循环中,它必须按顺序获取 XML 文件。我真的很想正确处理这个超时并使脚本继续到下一个地址。有谁知道如何做到这一点?谢谢!!

0 投票
1 回答
5353 浏览

perl - 请帮助我使用 WWW::Mechanize(或 LWP::UserAgent)调试 SSL 问题

我正在使用WWW::Mechanize将目录从我们的产品提供商加载到我们的数据库中。我每天每 2 小时运行一次这个脚本,它使用大约 50 个并发线程在大约 12 分钟内完成。

一切都很顺利,直到这个周末。他们将他们的网站离线进行定期维护,一旦他们再次在线,我的脚本就不再工作了。经过分析,归结为以下代码失败:

代码终止(大约 60 秒后)并显示以下消息:

现在,这些是让我难以找到问题的要点:

  1. 它与网络无关——如果我从任何浏览器访问相同的 URL,我就会得到该页面。

  2. 如果我在包含我的 Perl 安装的精确副本的远程机器上尝试相同的代码,它就可以工作。

  3. 如果我use Net::SSL之前WWW::Mechanize,它需要很长时间,但最终得到页面。

  4. 如果我尝试任何其他 SSL 页面,例如“ https://www.paypal.com ”,它可以运行并且非常快。

  5. 再说一次,它在他们预定的维护之前就开始工作了。

我不确定还能尝试什么。如果我切换到非 SSL 版本,它可以工作,但我不想这样做,因为我们会自动执行采购操作。

除了我脑海中闪过的许多事情,思考为什么它可以在远程机器上运行以及为什么我可以在本地浏览器中打开页面:

是否有可能被我的 SSL 公钥阻止?那可能吗?如果是这样,LWP/Mechanize 用于 SSL 会话的公钥是什么,我如何使用不同的公钥?

我当前设置的一些数据:

提前感谢您提供任何有用的评论。

0 投票
1 回答
1768 浏览

perl - Perl LWP::UserAgent 请求不使用 http1.1 返回但使用 http1.0 工作正常!?为什么?

我有一个非常简单的脚本(在 SLES11 系统上)将 http1.1 请求发送到服务器。这工作了很长时间。几天后它停止工作。我不知道为什么。经过一番调查,我发现强制脚本使用 http1.0 它又可以工作了。我不知道为什么。我想知道为什么它不能在默认的 http1.1 模式下工作。

据我所知,我已经启用了调试(请参见下面的代码)。但我什么也没看到——我的脚本挂了。没有网络活动。我看不到一个套接字将是openend(netstat -a),我也看不到服务器上来自我的客户端的任何传入流量。(“telnet myserver myport”工作正常。)

有人可以帮我解决这个问题吗?如何启用更多调试以查看真正的问题在哪里?

$ua->request() 不返回!我需要杀死/^C 脚本!

编辑:好的,似乎没有人知道如何继续。所以我开始使用 perl 调试器调试它。

所以我可以看到它没有从 request() 返回。

无论如何,由于LWP::UserAgent调用HTTP::Request::Common我将上面的示例代码更改回用于HTTP::Request::Common在调试时跳过该步骤的事实。

好的...新结果:

在 request() 里面它挂在IO::Socket::SSL. 意味着,此脚本足以进行进一步调试:

此声明不会回来。

再往下,里面IO::Socket::SSL挂着:

啊啊啊!已经有一个关于这个问题的错误报告:Net-SSLeay 挂在 Suse 11 P2 上,指向错误 #81575,上面写着:

我在安装了 openssl-0.9.8j 的 SLES 11 SP2 上遇到了同样的问题。升级到 openssl-0.9.8r 确实解决了这个问题。... 0.9.8r 的包可以在这个存储库中找到:http: //download.opensuse.org/repositories/security :/fips/

猜就是了!

0 投票
2 回答
2461 浏览

perl - Perl LWP 手动关闭连接

新问题:

我正在使用我的 Perl 脚本执行以下操作:

有没有办法结束会话?我的 Manager 应用程序的默认会话超时为 30 分钟。我试过的是:

但它仍然总是打开一个新会话。

我认为$browser->timeout在这里更改不是正确的方法,因为我需要在收到响应后终止会话。

任何帮助将不胜感激。


老问题:

有没有办法使用 LWP 手动结束我的会话?我有类似的东西:

我想连续多次运行我的脚本,一段时间后我在服务器上打开了一百万个会话。

提前感谢您的任何回答。

0 投票
2 回答
1023 浏览

perl - 通过 Perl 脚本登录 Jenkins

我可以使用以下程序更改构建的描述。这会将构建的描述更改为“FOO FOO FOO”。不幸的是,我的登录不起作用。现在,这个测试 Jenkins 构建服务器上没有安全性。但是,在我们的常规 Jenkins 服务器上,您需要登录才能更改构建的描述:

我正在尝试连接到 Jenkins 登录会话,但我认为我做得不太对。当我尝试登录时,我得到一个302响应和我的响应对象的以下转储:

我想我一定是在访问一个有效的页面,因为我得到了一个 302 代码,但我的字段可能不正确(或者我去错了页面)。

任何人都可以帮忙吗?

0 投票
1 回答
3528 浏览

perl - 在 perl 中使用 Net::Curl::Easy

我正在使用Net::Curl::Easyperl,但无法获得正确的 http 响应。LWP::UserAgent使用作品执行相同的请求。

真正的问题Net::Curl::Easy是它无法创建正确的 http 请求。看起来它发送带有标头参数Expect: 100 continue的 http 请求的一部分,这就是服务器使用响应标头HTTP/1.1 100 Continue不正确数据进行响应的原因。

示例代码是:

运行此文件后,检查ua_resp2easy_resp2之间的区别。

0 投票
3 回答
1300 浏览

perl - 使用 LWP::UserAgent 发布到表单没有得到响应(大多数情况下)

这是我的困境:我正在尝试填写 Web 表单并使用 LWP::UserAgent 从该表单中获取结果。这是我的代码示例:

当我运行它时,我得到一个 200 OK 和一个“1”表示成功,但不是来自表单的响应页面。只是结束标签:

这可能是因为表单页面和响应页面都具有相同的 URL 吗?我是 LWP 的新手,所以我在这里抓住了稻草。它可能仍然在客户端,但我也想排除我的任何问题。

提前感谢你们可以提供的任何帮助 - 我被谷歌搜索了。

0 投票
0 回答
252 浏览

perl - 如何处理 LWP::UserAgent 中的 102 响应

我有时会收到来自 Web 服务器的 102 响应。此响应表明服务器正在处理请求,但不是它的最终响应 ( http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#1xx_Informational )。request(>) 响应 (<) 序列可能如下所示:

>获取一些网址

<HTTP/1.1 102 处理

<HTTP/1.1 102 处理

<HTTP/1.1 102 处理

<HTTP/1.1 200 正常

从最终发送最终响应的意义上说,服务器可以被认为是可靠的。

使用 LWP::UserAgent (6.02) 我可以识别出我使用 HTTP::Status::is_info() 收到了 102,但是我需要做的是消耗至少一个甚至更多的原始请求的后续响应和一旦我得到回应,我就看不到这样做的方法。

我想我可以用我在其他地方成功使用的处理程序(http://metacpan.org/pod/LWP::UserAgent#Handlers)来做到这一点,但我找不到强制继续收听的方法。

我还寻找了一种在 LWP 中打开“102 意识”的方法,并让库负责监听它然后返回的最终响应,但我也看不到。

请告诉我我遗漏了一些明显的东西。

0 投票
1 回答
266 浏览

perl - LWP::UserAgent SendHub API 问题

SendHub 的文档状态以发送带有数据和 json 数据的帖子。这是他们给出的 curl 示例尝试使用 perl 和LWP::User Agent 执行此操作,但收到错误请求或未经授权

我的请求编码是否正确?

curl -H "Content-Type: application/json" -X POST --data '{"contacts" : [1111],"text" : "Testing"}' https://api.sendhub.com/v1/messages /?用户名

0 投票
1 回答
886 浏览

perl - 需要一种方法来拥有 Perl LWP::UserAgent 的线程池

基本上我正在编写一个脚本,我需要在其中发送 HTTP 请求,并再次基于响应,可以将更多请求发送到服务器并执行操作。为了达到同样的效果,我们编写了一个可以返回LWP::UserAgent的小子程序,下面是它的代码。

现在脚本的设计使得我们有多个线程级别,如果某些工作作为初始线程的一部分返回,则可以产生工作线程。由于这个原因,这些线程也可以创建 LWP::UserAgent 有时我观察到 Web 服务器主机返回 500 作为响应。当我们在报告此类错误时检查主机时,观察到大多数套接字都处于 TIME_WAIT 中,因此我们无法建立进一步的连接。

我提出的解决方案之一是,当启动工作线程时,我们只传递一个 LWP::UserAgent,该线程将在其整个生命周期中使用它,但由于父线程以更高的速率产生,我们会遇到错误。

那么我们如何创建一个 LWP::UserAgent 池,以便我可以限制连接并确保在脚本运行之前我们的套接字处于已建立模式。请注意,脚本可能需要 6-7 小时,因此我们需要确保在此期间套接字需要处于已建立模式。