web-dev-qa-db-ja.com

Apache HttpClient 4.3でCookieを処理する方法

Javaで一連のHTTPリクエストを実装する必要があり、バージョン4.3(最新のもの)でApache HttpClientを使用することにしました。

問題は、これらのすべての要求がセッション管理にCookieを使用することであり、そのCookieにアクセスして要求から要求に渡す方法を見つけることができないようです。 curlを使用する私のコマンドは次のようになります。

# Login
curl -c cookies -d "UserName=username&Password=password" "https://example.com/Login"

# Upload a file
curl -b cookies -F fileUpload=@IMG_0013.JPG "https://example.com/File"

# Get results of server processing file
curl -b cookies "https://example.com/File/1234/Content"

彼らは完璧に動作します。ただし、HttpClientでは動作しないようです。私が試したのは:

    URI serverAddress = new URI("https://example.com/");

    URI loginUri = UriBuilder.fromUri(serverAddress).segment("Login").queryParam("UserName", "username")
            .queryParam("Password", "password").build();

    RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.BEST_MATCH).build();
    CookieStore cookieStore = new BasicCookieStore();
    HttpClientContext context = HttpClientContext.create();
    context.setCookieStore(cookieStore);

    CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(globalConfig).setDefaultCookieStore(cookieStore).build();
    HttpGet httpGet = new HttpGet(loginUri);
    CloseableHttpResponse loginResponse = httpClient.execute(httpGet,context);

    System.out.println(context.getCookieStore().getCookies());

最後の行の出力は常に空のリストです。 Cookieが含まれていると思いますが、正しいですか?

Apache HttpClient 4.3を使用してCookieを処理する方法について、簡単な例を教えてもらえますか?

ありがとう

23
ali

あなたのコードは私には問題ないように見えます(リソースを解放しないことを除いて、しかし簡潔にするために例外処理は省略されていると思います)。 Cookieストアが空になる理由は、ターゲットサーバーによる実際のCookieポリシー(この場合はBEST_MATCH)に違反している可能性があります。そのため、サーバーから送信されたCookieは無効として拒否されます。 here のようにコンテキスト/ワイヤロギングをオンにすることで、その場合(および他の有用なコンテキストの詳細)を確認できます。

8
ok2c