3

サイトにログインして自動化されたアクティビティを実行するプログラムを作成しようとしています。私はHttpClient4.0.1を使用しており、これを使用して開始します:http: //hc.apache.org/httpcomponents-client/primer.html

この特定のサイトでは、Cookieは「set-cookie」ヘッダーではなく、javascriptで設定されます。

これまでのところ、ログインできません。

私は次のことを試しました:

  1. firebugに表示されるすべてのリクエストヘッダーに手動でヘッダーを追加します
   NameValuePair[]データ={
         new BasicNameValuePair( "Host"、host)、
         new BasicNameValuePair( "User-Agent"、 "Mozilla / 5.0(Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.7)Gecko / 20091221 Firefox / 3.5.7")、
         new BasicNameValuePair( "Accept"、 "text / html、application / xhtml + xml、application / xml; q = 0.9、* / *; q = 0.8")、
         new BasicNameValuePair( "Accept-Language"、 "en-us、en; q = 0.5")、
         new BasicNameValuePair( "Accept-Encoding"、 "gzip、deflate")、
         new BasicNameValuePair( "Accept-Charset"、 "ISO-8859-1、utf-8; q = 0.7、*; q = 0.7")、
         new BasicNameValuePair( "Keep-Alive"、 "300")、
         new BasicNameValuePair( "Connection"、 "keep-alive")、
         new BasicNameValuePair( "Referer"、referer)、
         new BasicNameValuePair( "Cookie"、cookiestr)
   };

   for(NameValuePairペア:データ){
      loginPost.addHeader(pair.getName()、pair.getValue());
   }

  1. BasicClientCookiesを作成し、setCookieStoreを使用して設定します。残念ながら、Cookieが実際に送信されているかどうかをテストする方法がわかりません。また、他にどのような自動パラメータが送信されているかをテストする方法はありますか?(どのブラウザがエミュレートされているかなど)。

私が得ている応答は次のとおりです。HTTP/1.1417期待に失敗しました

私はまだこれに慣れていないので、誰かが問題が何であるかを手元に知っていますか?そうでない場合は、詳細、コード、およびサイトを投稿します。

4

3 に答える 3

1

WireSharkまたはFiddlerが必要です。1 つ目はネットワーク アナライザーです (非常に低いレベルで何が起こっているかがわかります)。2 番目はプロキシとして機能します。透過性は低くなりますが、レベルは高くなります。

そうすれば、ブラウザでログインしたときに何が起こるか、コードで同じことをしようとすると何が起こるかを詳しく見ることができます。

于 2010-01-14T07:46:09.633 に答える
1

上記のコメントに同意します。Wireshark を使用して、クライアントから送信されている内容を明確に把握してください。Wireshark を使用して、同様の問題を自分でデバッグしました。不可欠。

まだ行っていない場合は、http://hc.apache.org/httpcomponents-client/examples.htmlの例、特に「フォーム ベースのログオン」を調べることをお勧めします。

BasicNameValuePair を使用して Http ヘッダーを設定することは避けたいと思います。HttpClient は基本を提供するはずです。HttpParams および HttpConnectionParams/HttpProtocolParams でさらに変更します。conn/ManagerConnectDirect の例は、ヘッダーを変更する方法を示しています。

于 2010-01-14T16:29:54.253 に答える
0

FireBug の "net" 機能を使用して、ブラウザでログインしたときに何が起こっているかを確認できます。このようにして、どのメソッドが Cookie 値を生成し、どのように設定する必要があるか (どのパス、名前) を把握できるはずです。これを使用して、次のように HttpClient に Cookie を設定します。

method.setRequestHeader("Cookie", "special-cookie=value");
于 2010-01-14T09:21:48.290 に答える