HttpClientの最新バージョン(4.x)を使用しています。現在、GETリクエストを実行しようとしています。 Getリクエストを投稿するだけです。
これは私のコードです。
public class Poster {
static boolean routing1 = true, routing2 = true;
static int counter1 = 0, counter2 = 0;
DefaultHttpClient oHtp = null;
HttpGet oHGet = null;
HttpResponse oHRes = null;
private void test(String fullAddress) throws Exception {
oHtp = new DefaultHttpClient();
oHGet = new HttpGet(fullAddress);
HttpResponse response = oHtp.execute(oHGet);
System.out.print(response.getStatusLine());
HttpEntity entity = response.getEntity();
if (entity != null) {
entity = new BufferedHttpEntity(entity);
// System.out.println(EntityUtils.toString(entity));
System.out.print("\t entity is retrieved... ");
}
oHtp.getConnectionManager().shutdown();
}
}
私はそれをうまく実行します。まずは
new Poster().test("http://123.xl.co.id/profile.php");
そして2番目は
new Poster().test("http://goklik.co.id/");
ええと、そして2番目のものだけ....私はこれを得ましたエラーメッセージ;
2011年9月18日10:11:30 AM org.Apache.http.client.protocol.ResponseProcessCookies processCookies WARNING:Cookie rejected: "[version:0] [name:CookiePst] [value:0149 = xwGHF7HYDHLHQ84Isp/eSy9vu + Xq6cT12wxg1A == ] [domain:.mcore.com] [path:/] [expiry:Sun Sep 18 10:38:59 ICT 2011] "。不正なドメイン属性" mcore.com "。のドメイン起源:「goklik.co.id」
ここにはCookieが含まれていることに気付きました。しかし、私は警告が何を意味するのか理解できません。また、それを解決する方法もわかりません(Cookieが拒否されていません)。皆さんから私の心を取り除くために少しの光があることを願っています...:D
それを「修正」することはできません。サイトが設定を許可されていないCookieを設定しようとしていますが、使用しているApacheクライアントライブラリがそのことを通知しています。
ドメインがmcore.com
のときにgoklik.co.id
のCookieを設定しようとしています
遅すぎるかもしれませんが、同じ問題があり、解決に役立つ何かを見つけました。 Cookie Policy をBrowser Compabilityに設定してください:
httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY,
CookiePolicy.BROWSER_COMPATIBILITY);
可能な値は次のとおりです。
Cookieポリシーは、特定のタイプまたはバージョンのCookieに対応するCookie管理インターフェースを提供します。
RFC 2109仕様がデフォルトで使用されます。その他のサポートされている仕様は、必要に応じて選択するか、必要に応じてデフォルトに設定できます
以下の仕様が提供されています。
BROWSER_COMPATIBILITY
:一般的なCookie管理手法と互換性があります(100%標準に準拠していない場合でも)NETSCAPE
:Netscape cookieドラフト準拠RFC_2109
:RFC2109準拠(デフォルト)IGNORE_COOKIES
:cookieを自動処理しない
httpclient
4.3以前は、同じページの この答え はクールです。
しかしsincehttpclient
4.3以降、APIは大幅に変更されたようで、次のコードが機能します。
RequestConfig customizedRequestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.BROWSER_COMPATIBILITY).build();
HttpClientBuilder customizedClientBuilder = HttpClients.custom().setDefaultRequestConfig(customizedRequestConfig);
CloseableHttpClient client = customizedClientBuilder.build(); // customized client,
私はhttpクライアント4.5.2を使用していますが、これは問題を簡単に解決するためにcookie仕様に設定されています。クライアントをインスタンス化する方法の例:
httpClient = HttpClients.custom()
.setDefaultRequestConfig(RequestConfig.custom()
// Waiting for a connection from connection manager
.setConnectionRequestTimeout(10000)
// Waiting for connection to establish
.setConnectTimeout(5000)
.setExpectContinueEnabled(false)
// Waiting for data
.setSocketTimeout(5000)
.setCookieSpec("easy")
.build())
.setMaxConnPerRoute(20)
.setMaxConnTotal(100)
.build();
v4.5.x(4.5.6 now now)で警告を抑制する最も簡単な方法は次のとおりです。
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
clientBuilder.disableCookieManagement();
HttpClient httpClient = clientBuilder.build();
エリックの答えを改善したいだけです。これは私のシナリオを直接解決しませんが、CookieSpecsをIGNORE_COOKIESに変更すると問題が解決します。
RequestConfig customizedRequestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();
HttpClientBuilder customizedClientBuilder =
HttpClients.custom().setDefaultRequestConfig(customizedRequestConfig);
CloseableHttpClient client = customizedClientBuilder.build(); // customized client,
私のバージョンのHttpClient 4.5では、CookieSpecs.BROWSER_COMPATIBILITYはすでに廃止されているためです。
Cookieを処理する必要がない場合は、使用するAPIに応じて_org.Apache.http.impl.cookie.IgnoreSpecProvider
_または_org.Apache.http.impl.cookie.IgnoreSpec
_を使用して、Cookieを無効にすることができます。 HttpClientBuilder
でdisableCookieManagement()
を呼び出すだけでは不十分です