問題タブ [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.
perl - LWP::Simple でウィキペディアのページを取得できないのはなぜですか?
LWP::Simpleを使用してウィキペディアのページを取得しようとしていますが、戻ってきません。このコード:
何も印刷しません。しかし、たとえば、他の Web ページを使用するとhttp://www.google.com
、問題なく動作します。
ウィキペディアのページを参照するために使用すべき他の名前はありますか?
ここで何が起こっているのでしょうか?
perl - LWP::UserAgent リクエスト メソッドの真のタイムアウト
信頼できないサーバーへのリクエストを実装しようとしています。リクエストはあると便利ですが、perl スクリプトが正常に完了するために 100% 必要というわけではありません。問題は、サーバーがときどきデッドロックし (理由を突き止めようとしています)、要求がまったく成功しないことです。サーバーはそれがライブであると認識しているため、ソケット接続を開いたままにしておくため、LWP::UserAgent のタイムアウト値は何の役にも立ちません。リクエストに絶対タイムアウトを強制する最良の方法は何ですか?
参考までに、これは DNS の問題ではありません。デッドロックは、Postgres データベースに同時にヒットする膨大な数の更新と関係があります。テスト目的で、本質的に while(1) {} 行をサーバーの応答ハンドラに入れました。
現在、コードは次のようになっています。
シグナルを使用してタイムアウトをトリガーしようとしましたが、うまくいかないようです。
私が使用する最終的な回答は、誰かがオフラインで提案したものですが、ここで言及します。何らかの理由で、SigAction は機能しますが、$SIG(ALRM) は機能しません。理由はまだわかりませんが、これは動作することがテストされています。2 つの作業バージョンを次に示します。
perl - LWP で SSL サーバー証明書を検証するにはどうすればよいですか?
接続しているサーバーの証明書が信頼できる機関によって署名され、正しいホストに発行されていることをLWPで確認するにはどうすればよいですか? 私が知る限り、証明書が接続先のホスト名のものであると主張していることさえチェックしません。これは重大なセキュリティ ホールのように思えます (特に最近の DNS の脆弱性では)。
更新:HTTPS_CA_DIR
ca-bundle.crt を持っていないので、私 が本当に欲しかったのは であることがわかりました。しかしHTTPS_CA_DIR=/usr/share/ca-certificates/
、トリックをしました。とにかく、答えは十分に近かったので、受け入れられたものとしてマークしています。
更新 2:基盤となる SSL ライブラリとして Net::SSL を使用している場合HTTPS_CA_DIR
にのみ適用されることが判明しました。HTTPS_CA_FILE
しかし、LWP は IO::Socket::SSL でも動作します。IO::Socket::SSL は、これらの環境変数を無視し、提示する証明書に関係なく、任意のサーバーと問題なく通信します。より一般的な解決策はありますか?
更新 3:残念ながら、解決策はまだ完全ではありません。Net::SSL も IO::Socket::SSL も証明書に対してホスト名をチェックしていません。これは、あるドメインの正当な証明書を誰かが取得し、LWP が文句を言うことなく他のドメインになりすますことができることを意味します。
perl - LWP、Apache、および mod_deflate を使用した HTTP リクエストの圧縮
Perl の LWP を使用するクライアントと、Apache を介して Perl の CGI.pm を実行するサーバーとの間で、HTTP 要求と応答を使用して転送される XML を使用して通信を行うクライアント/サーバー システムがあります。さらに、ストリームは、サーバーとすべてのクライアントの両方の証明書で SSL を使用して暗号化されます。
このシステムは、クライアントが非常に大量のデータを定期的に送信する必要があることを除けば、うまく機能します。明らかな解決策は、クライアント側でデータを圧縮して送信し、サーバーで解凍することです。これを自分で実装するのではなく、ここで説明されているように、Apache の mod_deflate の「入力圧縮解除」を使用したいと考えていました。
説明では次のように警告されています。
リクエスト本文を自分で評価する場合は、Content-Length ヘッダーを信用しないでください。Content-Length ヘッダーは、解凍されたデータ ストリームのバイト数ではなく、クライアントからの受信データの長さを反映します。
そのため、圧縮されたデータ サイズに一致する Content-Length 値を指定すると、データが切り捨てられます。これは、mod_deflate がストリームを圧縮解除するためですが、CGI.pm は Content-Length 制限までしか読み取らないためです。
あるいは、それを裏切って Content-Length ヘッダーを圧縮解除されたデータ サイズで上書きしようとすると、LWP は文句を言って値を圧縮された長さにリセットし、同じ問題が発生します。
最後に、修正を行う LWP の部分をハッキングしてみました。元のコードは次のとおりです。
そして、プッシュラインを次のように変更しました:
残念ながら、これにより、コンテンツ (切り捨てられているかどうかにかかわらず) が CGI スクリプトに到達しないという問題が発生します。
誰かがこれを機能させましたか?アップロードする前にファイルを圧縮するが、一般的なリクエストを圧縮しないこれを見つけました。
javascript - WebサイトのXMLを抽出し、PerlのLWPを使用してファイルに保存するにはどうすればよいですか?
Webサイト( http://tv.yahoo.com/listings )から情報を抽出し、そこからXMLファイルを作成するにはどうすればよいですか?後で解析してJavaScriptを使用して情報を表示するために保存したいですか?
私はPerlにまったく慣れていないので、その方法がわかりません。
perl - LWP::UserAgent に期限切れの SSL 証明書を強制的に受け入れることはできますか?
LWP::UserAgent に、よく知られている単一のサーバーの期限切れの SSL 証明書を強制的に受け入れることができるかどうかを知りたいです。この問題は、その間にある Squid プロキシによって少し複雑になります。
次のようなデバッグ環境をセットアップするところまで行きました。
幸いなことに、私が独自の解決策を思い付く前に、問題は最終的にリモートサーバーで修正されましたが、問題が再び発生した場合に備えて、オプションで問題を回避できるようにしたいと考えています (基礎となるサービスは、私が解決する前に数時間中断されていました)。行動に移した)。
他の無関係なアプリケーションのセキュリティを緩めたくないので、もしそのような解決策が存在するなら、基礎となる Crypt::SSLeay または openSSL 実装に基づくものよりも LWP::UserAgent レベルでの解決策を好みます。もちろん、私は今でもそのような解決策を自分自身で探しています。
perl - LWP::Simple でプロキシ サーバーを処理するにはどうすればよいですか?
このスクリプトにプロキシ サポートを追加するにはどうすればよいですか?
windows - LWP::Parallel::UserAgent を含むリポジトリはどれですか?
Windows 環境で実行するには、LWP::Parallel::UserAgentをインストールする必要があります。ActivePerl 5.10 を使用しました。Google で検索しましたが、このパッケージのリポジトリに関する情報が見つかりませんでした
perl - WWW::Mechanizeを使用してGZipでエンコードされたコンテンツを透過的に処理する
私はWWW::Mechanizeを使用しており、現在Content-Encoding: gzip
、コード内の''ヘッダーでHTTP応答を処理しています。最初に応答ヘッダーを確認し、次にIO :: Uncompress::Gunzipを使用して非圧縮コンテンツを取得します。
ただし、form()、links()などのWWW :: Mechanizeメソッドが機能し、非圧縮コンテンツを解析できるように、これを透過的に実行したいと思います。WWW::MechanizeはLWP::UserAgentのサブクラスであるため、これを行うにはLWP :: UA::handlersを使用することをお勧めします。
私は部分的に成功していますが(たとえば、非圧縮のコンテンツを印刷できます)、私が呼び出すことができる方法でこれを透過的に行うことはできません
要約:$ mechオブジェクト内のコンテンツを「置換」して、それ以降、すべてのWWW :: Mechanizeメソッドが、Content-Encodingが発生しなかったかのように機能するようにするにはどうすればよいですか。
ご清聴ありがとうございました。ありがとう
perl - Perl の LWP でイメージをダウンロードすると、ファイルのサイズが正しくないのはなぜですか?
Perl を使用して HTTP サーバーから画像を取得しようとしています。
ファイルの完全な URL があり、使用しようとしています
さて、論理的には、少なくとも私にとっては、これでうまくいくはずです。しかし、ファイルのサイズがわずかに異なり、その理由がわかりません。
ヘルプ!