3

以下の方法でリクエストを送信しています。

    HttpClient httpClient=new DefaultHttpClient();
    CookieStore cookieStore=new BasicCookieStore();
    HttpContext httpContext=new BasicHttpContext();
    httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
    httpClient.execute(httppost,httpContext);

Java側の認証Cookieは次のようになります。

XNlciI6WzU2Mjk0OTk1MzQyMTMxMjAsMCwidEFlbVlLYlpuRXYyc29TNjBSOHhueCIsMTM3MzM0NzcyMCwxMzczMzQ3NzIwXX0\075|1373347720|5c1ad3ac3828516aa7178f00b3bba961fa29aeb

(予告\075)

サーバー側はこんな感じ。

XNlciI6WzU2Mjk0OTk1MzQyMTMxMjAsMCwiejJYUXpQQVhBQ0lQVkdCQU5FMkRtdSIsMTM3MzM0OTIyNiwxMzczMzQ5MjI2XX0

Pythonリクエストを使用すると、表示されるCookieは次のようになります。

XNlciI6WzU2Mjk0OTk1MzQyMTMxMjAsMCwiclYzYW1FakRHc0dhampDcnhoMlBIVyIsMTM3MzM0OTEzNiwxMzczMzQ5MTM2XX0=|1373349137|e8900c8bfd2972ca4115ef1946b4cdf161a485

| の後のビットを HttpClient が無視しているようです。(日付コードなど)。何か不足していますか?すべての Cookie ポリシーも試しましたが、何も機能しませんでした。

4

3 に答える 3

2

同じ問題があり、独自の Cookie-Parser メソッドを作成して解決しました。

/**
 * Modified method to parse cookies which contain "=" in their value.<br>
 * The default method {@link HttpServletRequest#getCookies()} cuts off cookies values at the first occurrence of "=".
 * 
 * @param httpRequest
 * @return
 */
public static Map<String, Cookie> parseCookies(HttpServletRequest httpRequest)
{
    return parseCookies(httpRequest.getHeader("Cookie"));
}

public static Map<String, Cookie> parseCookies(String cookieHeader)
{
    Map<String, Cookie> result = new LinkedHashMap<String, Cookie>();
    if (cookieHeader != null)
    {
        String[] cookiesRaw = cookieHeader.split("; ");
        for (int i = 0; i < cookiesRaw.length; i++)
        {
            String[] parts = cookiesRaw[i].split("=", 2);
            String value = parts.length > 1 ? parts[1] : "";
            if (value.length() >= 2 && value.startsWith("\"") && value.endsWith("\""))
            {
                value = value.substring(1, value.length() - 1);
            }
            result.put(parts[0], new Cookie(parts[0], value));
        }
    }
    return result;
}
于 2014-02-10T21:02:16.610 に答える
0

独自のパーサーを作成する代わりに、Jetty のCookieCutterを使用します。

于 2016-03-29T00:37:32.830 に答える