問題タブ [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.
perl - perlで明確なタイムアウトを強制する方法は?
LWP を使用して Web ページからコンテンツをダウンロードしていますが、LWP がページを待機する時間を制限したいと考えています。
問題は、サーバーがときどきデッドロックし (理由を突き止めようとしています)、要求がまったく成功しないことです。サーバーはそれがライブであると認識しているため、ソケット接続を開いたままにしておくため、LWP::UserAgent のタイムアウト値は何の役にも立ちません。リクエストに絶対タイムアウトを強制する最良の方法は何ですか?
タイムアウトが制限に達すると、スクリプトが終了し、スクリプトを続行できなくなります。このスクリプト全体がループに入っており、XML ファイルを順番に取得する必要があります。このタイムアウトを適切に処理し、スクリプトを次のアドレスに継続させたいと思っています。誰もこれを行う方法を知っていますか? ありがとう!!
perl - WWW::Mechanize (または LWP::UserAgent) を使用して SSL の問題をデバッグするのを手伝ってください。
WWW::Mechanize
製品プロバイダーからデータベースにカタログをロードするために使用しています。このスクリプトを毎日 2 時間ごとに実行すると、約 50 の同時スレッドを使用して約 12 分で完了します。
今週末まで、すべてが完璧に機能していました。彼らは定期的なメンテナンスのために Web サイトをオフラインにし、オンラインに戻ると、私のスクリプトは機能しなくなりました。物事を分析した後、次のコードが失敗することになります。
コードは (約 60 秒後に) 次のメッセージで終了します。
さて、これらは私が問題を見つけるのを難しくしているポイントです:
これはネットワーク関連ではありません。どのブラウザからでも同じ URL にアクセスすると、そのページが表示されます。
Perl インストールの正確なコピーを含むリモート マシンで同じコードを試すと、動作します。
use Net::SSL
以前の場合WWW::Mechanize
、非常に長い時間がかかりますが、最終的にページを取得します。「 https://www.paypal.com 」などの他の SSL ページを試してみると、非常に高速に動作します。
繰り返しになりますが、定期メンテナンスの前に機能していました。
他に何を試すべきかわかりません。非SSL版に切り替えれば動くのですが、自動で購入しているのでやりたくないです。
なぜリモート マシンで動作するのか、なぜローカル マシンのブラウザーでページを開くことができるのかを考えながら、私の頭をよぎった多くの事柄に加えて、
SSL 公開鍵でブロックされる可能性はありますか? それは可能ですか?その場合、LWP/Mechanize が SSL セッションに使用している公開鍵は何ですか? また、別の公開鍵を使用するにはどうすればよいですか?
私の現在のセットアップに関するいくつかのデータ:
- OS: Windows 7 アルティメット x64
- Perl バージョン: 5.16.3 x64
LWP::UserAgent
バージョン: 6.05WWW::Mechanize
バージョン: 1.72IO::Socket
バージョン: 1.34IO::Socket::SSL
バージョン: 1.85Net::SSL
バージョン: 2.85Crypt::SSLeay
バージョン: 0.64
有益なコメントをお寄せいただきありがとうございます。
perl - Perl LWP::UserAgent リクエストは、http1.1 を使用すると返されませんが、http1.0 を使用すると正常に動作します!? なんで?
サーバーに http1.1 要求を送信するための非常に単純なスクリプト (SLES11 システム上) があります。これは長い間うまくいきました。数日以来、それは機能しなくなりました。理由がわかりません。調査の結果、スクリプトに http1.0 の使用を強制すると、再び機能することがわかりました。理由がわかりません。また、デフォルトの http1.1 モードで動作しない理由を知りたいです。
私が知っている限り、すでにデバッグを有効にしています (以下のコードを参照)。しかし、何も表示されません。スクリプトがハングするだけです。ネットワーク アクティビティはありません。ソケットが openend (netstat -a) になることも、サーバー上のクライアントからの着信トラフィックも表示されません。(「telnet myserver myport」は問題なく動作します。)
この問題を追跡する方法を教えてください。実際の問題がどこにあるのかを確認するために、さらにデバッグを有効にするにはどうすればよいですか?
$ua->request() は戻りません! スクリプトを kill/^C する必要があります!
編集: わかりました、続行する方法を誰も考えていないようです。そこで、perl デバッガーを使用してデバッグを開始します。
したがって、request() から返されていないことがわかります。
LWP::UserAgent
とにかく、呼び出しがあるという事実のために、HTTP::Request::Common
上記のサンプルコードを変更して、HTTP::Request::Common
デバッグ中にそのステップをスキップするために使用しました。
わかりました... 新しい結果:
request() 内部では でハングしIO::Socket::SSL
ます。つまり、このスクリプトはさらにデバッグするのに十分です:
この発言は返ってきません。
さらに下に行くと、次のIO::Socket::SSL
場所にぶら下がっています。
ああ!この問題に関するバグレポートが既にあります: Suse 11 P2 で Net-SSLeay がハングアップし、次のようなバグ #81575が指摘されています。
openssl-0.9.8j がインストールされている SLES 11 SP2 でも同じ問題が発生しました。openssl-0.9.8r へのアップグレードにより、問題は解決しました。... 0.9.8r のパッケージは、次のリポジトリにあります: http://download.opensuse.org/repositories/security:/fips/
それだけだと思います!
perl - Perl で Net::Curl::Easy を使用する
Net::Curl::Easy
perl で使用していますが、適切な http 応答を取得できません。LWP::UserAgent
作品を使用して同じ要求を行う。
の本当の問題Net::Curl::Easy
は、適切な http 要求を作成できないことです。HTTP リクエストの一部をヘッダー パラメータExpect: 100 continueで送信しているように見えるため、サーバーはレスポンス ヘッダーHTTP/1.1 100 Continue illegal dataで応答します。
サンプルコードは次のとおりです。
このファイルを実行した後、 ua_resp2とeasy_resp2の違いを確認します。
perl - LWP::UserAgent を使用してフォームに POST しても応答がありません (ほとんどの場合)
ここに私のジレンマがあります: Web フォームに記入し、LWP::UserAgent を使用してそのフォームから結果を取得しようとしています。これが私のコードの例です:
これを実行すると、200 OK と成功の "1" が返されますが、フォームからの応答ページは返されません。終了タグのみ:
これは、フォーム ページと応答ページの URL が同じであることが原因でしょうか? 私は LWP を初めて使用するので、ここでストローをつかんでいます。それはまだクライアント側にあるかもしれませんが、私側の問題も除外したいと思います.
皆さんが与えることができる助けを前もって感謝します-私はグーグルアウトされています。
perl - LWP::UserAgent で 102 応答を処理する方法
Web サーバーから 102 応答が返されることがあります。この応答は、サーバーが要求を処理していることを示していますが、それに対する最終的な応答ではありません ( http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#1xx_Informational )。request(>) 応答 (<) シーケンスは次のようになります。
>
some_url を取得する
<
HTTP/1.1 102 処理
<
HTTP/1.1 102 処理
<
HTTP/1.1 102 処理
<
HTTP/1.1 200 OK
最終的な応答が最終的に送信されるという意味で、サーバーは信頼できると見なすことができます。
LWP::UserAgent (6.02) を使用すると、HTTP::Status::is_info() を使用して 102 を受信したことを認識できますが、次に行う必要があるのは、元の要求に対して少なくとも 1 つ、場合によってはそれ以上の後続の応答を消費することです。応答があれば、それを行う方法がわかりません。
他の場所で正常に使用しているハンドラー ( http://metacpan.org/pod/LWP::UserAgent#Handlers ) でそれを実行できると思いましたが、リッスンを強制的に続行する方法が見つかりません。
また、LWP 内で「102 認識」をオンにして、ライブラリが返す最終応答をリッスンするようにする方法も探しましたが、それもわかりません。
明らかな何かが欠けていると教えてください。