Java 为什么';HttpClient是否发送我的Cookie?

Java 为什么';HttpClient是否发送我的Cookie?,java,cookies,post,request,httpclient,Java,Cookies,Post,Request,Httpclient,我正在Java中使用Apache HttpClient 4。 为什么HttpClient不将响应“request”设置的Cookie发送到post1 public static void goDoIt() throws ClientProtocolException, IOException { HttpClient client = new DefaultHttpClient(); //for use with Fiddler2 HttpHost proxy = ne

我正在Java中使用Apache HttpClient 4。
为什么HttpClient不将响应“request”设置的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));
}
public static void goDoIt()抛出ClientProtocolException,IOException{
HttpClient=new DefaultHttpClient();
//与小提琴一起使用2
HttpHost代理=新的HttpHost(“127.0.0.1”,8888);
client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,PROXY);
//自动存储所有cookie(也应发送它们(?)
CookieStore CookieStore=新的BasicCookieStore();
HttpContext localContext=新的BasicHttpContext();
setAttribute(ClientContext.COOKIE_存储,cookieStore);
HttpGet请求=新建HttpGet(“http://www.websitename.de");
addHeader(“Host”、“hosthost.de”);
addHeader(“用户代理”、“Mozilla/5.0(Windows NT 6.0;rv:2.0.1)Gecko/20100101 Firefox/4.0.1”);
//需要获取Cookie 1,并自动存储
HttpResponse response1=client.execute(请求,本地上下文);
request.abort();
//参数和标题
列表参数1=新的ArrayList();
参数1.add(新的BasicNameValuePair(“用户名”、“卡尔”));
参数1.添加(新的BasicNameValuePair(“年龄”,“23”));
参数1.添加(新的BasicNameValuePair(“按钮”、“按钮”);
HttpPost1=新的HttpPost(“http://websitename.de/Default.aspx");
post1.addHeader(“Host”、“hosthost.de”);
post1.addHeader(“用户代理”,
“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=新的UrlEncodedFormEntity(参数1);
post1.setEntity(entity1);
//执行并打印
HttpResponse response2=client.execute(post1,localContext);
HttpEntity entity2=response2.getEntity();//fiddler未显示正在发送cookie!
System.out.println(EntityUtils.toString(entity2));
}

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

因为您是从中获取cookie的,但稍后尝试访问。这不是相同的主机名。

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

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

  • 确保URL主机名和端口相同
  • 获取web服务器以设置域属性为“.websitename.de”的cookie。然而,这具有重要的安全含义,因为cookie将与请求一起发送到“websitename.de”的所有子域。。。对于使用普通web浏览器访问网站的其他用户
  • 创建/配置CookieStore,该CookieStore将忽略正常规则,并将cookie发送到“www.websitename.de”。(想必,您知道自己在做什么,这不是安全风险…)