我嘗試使用Apache HttpClient以表單發送cookie,並且出於某種原因,服務器獲取請求但不是cookie。這裏是我的代碼:Java - 爲什麼HttpClient不發送我的cookies?
DefaultHttpClient client = new DefaultHttpClient();
// Set the cookies...
{
String Domain = MyGetParameter("Domain");
BasicCookieStore cookieStore = new BasicCookieStore();
String[] strs = GetParameterSplitted("PostCookies");
int size = strs.length;
for (int i=0; i<size-1; i+=2)
{
//JOptionPane.showMessageDialog(null, strs[i]+" = "+FromBase64(strs[i+1], "UTF-8"));
BasicClientCookie cookie = new BasicClientCookie(strs[i], FromBase64(strs[i+1], "UTF-8"));
cookie.setDomain(Domain);
cookie.setPath("/");
//cookie.setSecure(true);
cookieStore.addCookie(cookie);
}
client.setCookieStore(cookieStore);
}
HttpPost post = new HttpPost(url.toURI());
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(10);
// Set the form POST parameters...
{
String[] strs = GetParameterSplitted("PostParams");
int size = strs.length;
for(int i=0; i<size-1; i+=2)
{
String name = strs[i].trim();
String value = FromBase64(strs[i+1].trim(), "UTF-8");//, "UTF-8"
nameValuePairs.add(new BasicNameValuePair(name, value));
}
}
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
post.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
post.getParams().setParameter(ClientPNames.COOKIE_POLICY, org.apache.http.client.params.CookiePolicy.BROWSER_COMPATIBILITY);
HttpResponse response = client.execute(post);
int StatusCode = response.getStatusLine().getStatusCode();
該網站使用HTTP(不是HTTPS),我要確保域名正確設置爲餅乾(http://mysite
)和餅乾似乎上面的代碼執行時要正確設置。
有沒有人有任何想法,爲什麼它沒有通過他們到服務器? 我在這個網站上看到過其他類似的問題,但似乎沒有任何幫助。
確實來自您發送完全相同的域名的cookies?例如'http:// stackoverflow.com'和'http:// www.stackoverflow.com'是不同的域。 – ddmps 2013-04-08 10:28:08
是的。實際上,如果POST URL不同,我認爲請求不會到達服務器。我在本地調試該站點。 我將Cookie域設置爲'http:// mysite',並將表單發佈到'mysite/blah/blah'。我不認爲'http://'部分扮演什麼角色,是嗎? – user2173353 2013-04-08 10:40:10
我是否需要設置路徑:'cookie.setPath(「/ blah/blah」);'? – user2173353 2013-04-08 10:52:20