問題タブ [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.
json - LWP::UserAgentを使用してhttp://www.firstgiving.comからJSONデータを取得しようとしています
聞いたことがあるかもしれませんが、現在、いくつかのサブレディット、特にr/atheismがチャリティードライブを行っています。資金調達を支援/奨励するために、私はこれらの寄付に関するリアルタイムの情報を提供するための小さなWebユーティリティを書き始めました(基本的に、RedditからのデータをFirstGivingからのデータとマッシュアップします)-あなたは私がこれまでに持っているものを見ることができますここでは、各subredditの合計と平均値を示しているだけであり、非常に予備的なものです(これもきれいではありません)。
私が追加したい機能は、FirstGivingが提供していないように見える機能、特定の寄付を検索またはリンクする機能です。先週、人々が寄付のマッチングなどを提供しようとした投稿がたくさんありましたが、偽の/トロールの投稿もたくさんあり、誰かが「配信」しているかどうかを確認する良い方法はありません(スクリーンショットは簡単です偽物。)FirstGivingからデータをキャッシュして、誰かがリンクできるようにする予定です。
FirstGivingページを調べたところ、文書化されていないJSON API呼び出し(ページの一番下までスクロールしてさらに寄付を表示するときに使用)があり、寄付金額、メッセージ、ニックネームのリストがHTMLテーブルとして返されるようです。Opera Dragonflyによると、ブラウザ(Opera)でアクセスすると次のようになります。
詳細をリクエストする
体
(応答本文の残りの部分を削除しました。また、通常はより多くのCookieがありますが、aspsession idを除くすべてを手動で削除しました。正常に機能したため、分析など以外には関連していないようです)
ただし、 perlスクリプトから同じことを実行しようとすると、この有用な出力が得られません。これが私のスクリプトです:
そしてここに出力があります:
回線を有効にするとpush @{ $ua->requests_redirectable }, 'POST';
(つまり、POSTのリダイレクトを許可すると)、404エラーページにリダイレクトされます
これが人間以外のクライアントを締め出すためのFirstGivingによる意図的な試みである場合、私はもちろんあきらめますが、彼らのrobots.txtは私がしていることを禁止していないようです。
perl - PerlでフェッチしたHTMLがブラウザで表示されるものと異なるのはなぜですか?
Perlを使用してhttp://www.coupons.com/からデータをフェッチするWebスクレイパーを作成しています 。問題は、LWP::UserAgentでフェッチするHTMLがWebブラウザーに表示されるものと異なることです。JavaScript変数「CouponClubMember」の内容に興味があり、Perlで受け取るHTMLではこの変数は空です。
何か案は?
perl - LWP::Agentを使用するPerlJSON:: RPC :: Client
JSON :: RPC :: Clientを使用せず、代わりにLWPを使用して呼び出しを行うという要件が与えられています。
これが私のコードです:
サーバ:
モジュール:
作業中のクライアント:
動作していないクライアント:
両方のクライアントのサーバープロセスが表示されますが、2番目のクライアントにはデータが返されません。
誰かが私が欠けているものを見ていますか?非常に単純なはずですが、何らかの理由で、RPC::Clientが表示するような応答文字列が見つかりません。
perl - 接続にユーザー名とパスワードが必要な XML で Perl LWP::UserAgent を使用する
OK... 戦略的パートナーのサイトに XML ページを投稿して、計算を行って応答コードを返すようにしようとしていますが、これも XML 経由です。
私はさまざまな PERL を使用しており、これを行うために LWP::UserAgent を使用しようとしていました...もっとエレガントな方法があれば、その方向を教えてください。
私は彼らのサーバーにアクセスしてコードを取得することができます...しかし、期待しているユーザー名とパスワードが正しくないため、サーバーへのアクセスを拒否します。ユーザー名とパスワードは実際の XML コードでは指定されていません。実際の POST メソッドの一部としてサーバーに渡されるはずですが、その方法がわかりません。
パートナーは次のフィードバックを提供します。
YOUR_XML_FILE、YOUR_USER、および YOUR_PASSWORD を、生成される XML とユーザー名とパスワードの組み合わせに置き換えます。これは、彼が perl スクリプトを持っているサーバーから行う必要があります。
wget --no-check-certificate --post-file YOUR_XML_FILE https://previewtest.clverify.com/webservice/exec -O previewsamplerequest.response.xml --http-user=YOUR_USER --http-password=YOUR_PASSWORD
これがどこで生成されるのか、または LWP::UserAgent にそれらを指定するためのオプションが何であるかはわかりません。誰かが以前にこれをやったことがありますか?
これが私のコードです:
xml - LWP::UserAgent が XML を安全なサーバーに投稿する... 証明書の問題
LWP::UserAgent を使用して、リモート サーバーへの XML データの POST を実行しています。リモート URL は https で、サーバーにインストールする .crt ファイルが送られてきました。
サーバーに接続しようとすると、次のメッセージが表示されます。
エラーが発生しました
500 Previewtest.clverify.com:443 に接続できません (証明書の検証に失敗しました) 500 previewtest.clverify.com:443 に接続できません (証明書の検証に失敗しました) Content-Type: text/plain Client-Date: Wed, 25 Jan 2012 05:11:24 GMT Client-Warning: Internal response Can't connect to previewtest.clverify.com:443 (certificate verify failed) LWP::Protocol::https::Socket: SSL 接続試行が不明なエラーエラーで失敗しました: 14090086:SSL ルーチン:SSL3_GET_SERVER_CERTIFICATE:証明書の検証が /usr/lib/perl5/site_perl/5.8.8/LWP/Protocol/http.pm 行 51 で失敗しました。
サーバー上の SSL 証明書を適切に参照し、サーバーに送信するにはどうすればよいですか?
コードは次のとおりです。
さて...私に送られた証明書が /usr/bin/some_dir/DigiCertCA.crt にあるとしましょう。
サーバーが呼び出されたときに証明書をチェックするように設定するにはどうすればよいですか?
xml - LWP::HTTPS サーバーへの XML POST の UserAgent が機能しない
わかりました...これがより明確かどうか見てみましょう。
LWP::UserAgent を介してリモートのサードパーティ サーバーに XML ドキュメントの POST を実行しています。
彼らは以前、私がサーバーにインストールした .crt ファイルを私に送信し、CPanel と Putty コマンド ラインの "locate" 呼び出しを介して、アドレスとそれらが存在するという事実を確認しました。証明書はそこにあります。
LWP::Protocol::https と、Mozilla::CA、Crypt::SSLeay などを含むその他すべての必要な Perl mod がインストールされていることを確認しました。
スクリプトを実行すると、次のエラーが表示されます。
エラーが発生しました
500 shortURL:port に接続できません (証明書の検証に失敗しました) 500 shortURL:port に接続できません (証明書の検証に失敗しました) Content-Type: text/plain Client-Date: Wed, 25 Jan 2012 17:53:36 GMT Client-Warning: Internal response Can't connect to shortURL:port (certificate verify failed) LWP::Protocol::https::Socket: SSL connect attempts failed with unknown errorerror:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed at / usr/lib/perl5/site_perl/5.8.8/LWP/Protocol/http.pm 51 行目。
呼び出しコードは次のとおりです。
何かご意見は?ここでアイデアが不足しています。:(
perl - LWP 読み取り失敗エラー
LWP::UserAgent を使用して単純な HTTP Post を実行すると、以下のエラーが発生します。オンラインで多くの検索を行ったところ、修正されたバグがしばらく前にあったようです。バージョン 6.03 を修正する必要があります。なぜこれが起こっているのかについてのアイデアはありますか?
コードサンプルは次のとおりです。
perl - Perl LWP::UserAgent を使用したサイトの解析 -- Cookie が必要
Perl の特定のプロジェクトで、LWP::UserAgent を使用して Web サイトにアクセスできるようにする「パーサー」をいくつか作成しました。ただし、ある Web サイトで問題が発生しています。Cookie をオフにして、ブラウザでそのサイトにアクセスした場合とまったく同じように動作するため、目的のページが表示される代わりに、次のメッセージが表示されたページが表示されます。 Cookie をオンにする必要があります。私のスクリプトのコード全体を以下に示します。何か案は?前もって感謝します。
(私の質問に対処しているように見える次の URL を見たことに注意してください。残念ながら、その提案に基づいて動作するスクリプトを取得できませんでした: Cookies in perl lwp。)
perl - LWP ::UserAgentHTTPSのタイムアウトを機能させる
解決
私が受け入れた回答で@limulusによって報告されたように、これはNet::HTTPS
バージョン6.00のバグでした。常に新しい.0リリースに注意してください。そのモジュールのバグのあるバージョンと修正されたバージョンの関連する違いは次のとおりです。
元の質問
関連性:接続エンドポイントの信頼性が低いため、HTTPSクライアントブロックが無期限に表示されるのは面倒です。
この実験は、自宅で簡単に設定して再生できます。必要なのは、着信クライアントをトラップするためのtarpitとPerlスクリプトの2つだけです。ターピットは、以下を使用して設定できますnetcat
。
次に、スクリプトで次のターピットを指定します。
これは何をするつもりですか?さて、NetCatによって開かれたポートに接続してから...ハングします。無期限に。少なくとも開発者の時間に関しては。10分か2時間後にタイムアウトするかもしれませんが、私はチェックしていません。指定されたタイムアウトは、LinuxでもWindowsでも有効になりません(Win32、Cygwinをチェックしていません)。
使用したバージョン:
次に、timeout
とTimeout
パラメータについて説明します。前者はLWP::UAのパラメーターの名前であり、後者はIO :: Socket :: SSLの名前であり、 LWP :: Protocol::httpsを介して使用されます。(ちなみに、なぜmetacpan HTTPSなのですか?まあ、少なくともそれはターピットではありません。)私はどういうわけかこれらのパラメーターを渡してもらいたいと思っています:)
ご存知のとおり、keep_alive
タイムアウトが機能しないこととは何の関係もありません。経験的に検証しました。:)
とにかく、深く掘り下げる前に、ここで何が起こっているのか、HTTPSでタイムアウトを機能させる方法を誰かが知っていますか?私がこれに遭遇した最初の人だとは信じがたい。
perl - LWP::UserAgent に IP を割り当てることができないのはなぜですか?
異なる IP アドレスを持つサービスへの呼び出しを実行できるスクリプトがあります。私のコードは、呼び出しに IP を設定しない場合に機能します。呼び出しを行う前にオブジェクトに IP を割り当てる関数を作成しましたが、エラーが返されます。
これは私の関数構造です:
そして、これは私がそれらを呼ぶ方法です:
何が問題かわかりますか?!
事前にご協力いただきありがとうございます。