【问题标题】:Why doesn't HttpClient send my Cookie?为什么 HttpClient 不发送我的 Cookie?
【发布时间】:2011-05-14 22:43:26
【问题描述】:

我在 Java 中使用 Apache HttpClient 4。
为什么HttpClient不将“请求”的响应设置的Cookie发送到post1?

public static void goDoIt() throws ClientProtocolException, IOException {

    HttpClient client = new DefaultHttpClient();
    //for use with Fiddler2
    HttpHost proxy = new HttpHost("127.0.0.1", 8888);
    client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
    //stores all cookies automatically (should sent them too(?))
    CookieStore cookieStore = new BasicCookieStore();
    HttpContext localContext = new BasicHttpContext();
    localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

    HttpGet request = new HttpGet("http://www.websitename.de");
    request.addHeader("Host", "hosthost.de");
    request.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1");

    //required to fetch Cookie 1, stored automatically
    HttpResponse response1 = client.execute(request, localContext);
    request.abort();

    // parameters and headers
    List<NameValuePair> parameters1 = new ArrayList<NameValuePair>();
    parameters1.add(new BasicNameValuePair("username", "karl"));
    parameters1.add(new BasicNameValuePair("age", "23"));
    parameters1.add(new BasicNameValuePair("button","button"));

    HttpPost post1 = new HttpPost("http://websitename.de/Default.aspx");

    post1.addHeader("Host","hosthost.de");
    post1.addHeader("User-Agent",
            "Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1");
    post1.addHeader("Referer","http://websitename.de/Default.aspx");

    UrlEncodedFormEntity entity1 = new UrlEncodedFormEntity(parameters1);
    post1.setEntity(entity1);


    // execute and print
    HttpResponse response2 = client.execute(post1,localContext);
    HttpEntity entity2 = response2.getEntity(); //fiddler doesn't show that the cookie is being sent !

    System.out.println(EntityUtils.toString(entity2));
}

我使用 Fiddler2 查看流量,当我将我的代码中的帖子与 Firefox 中的帖子进行比较时,我没有发现任何差异,只是我的代码没有发送 cookie。

【问题讨论】:

    标签: java cookies post request httpclient


    【解决方案1】:

    因为您从http://www.websitename.de 获取cookie,但稍后尝试访问http://websitename.de。这不是同一个主机名。

    【讨论】:

      【解决方案2】:

      @Jochen 已确定可能的原因。这是基本的 HTTP cookie 行为。默认情况下,cookie 仅发送到设置它们的站点……出于安全和隐私原因。

      如果您想解决此问题,您应该执行以下操作之一:

      • 确保 URL 主机名和端口相同。
      • 让 Web 服务器设置 cookie 的域属性为“.websitename.de”。但是,这具有重大的安全隐患,因为 cookie 将与“websitename.de”的所有子域的请求一起发送......对于使用普通 Web 浏览器访问该站点的其他用户。
      • 创建/配置一个 CookieStore,它将忽略正常规则并将 cookie 发送到“www.websitename.de”。 (大概,你知道你在做什么,这不是安全风险......)

      【讨论】:

        猜你喜欢
        • 2013-03-30
        • 2021-02-11
        • 2013-07-02
        • 1970-01-01
        • 2022-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-10
        相关资源
        最近更新 更多