24

Java で一連の HTTP リクエストを実装する必要があり、バージョン 4.3 (最新のもの) で Apaches 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 を処理する方法の小さな例を教えてもらえますか?

ありがとう

4

1 に答える 1

8

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

于 2013-10-02T15:19:28.030 に答える