在过去的几天里,我一直在撞墙挡住我的头,我无法解决这个问题所以我祈祷有人可以帮助我。
基本上我正在登录一个WordPress帐户,我发布登录详细信息并获得一个cookie,显示我已登录,然后我尝试访问用户维护面板,然后我被重定向回登录页面。当我循环访问我的cookie时,似乎我的登录cookie已经消失了。我甚至使用新的v4 HttpClient,据说它有更好的cookie管理。
如果有人知道发生了什么,我真的很感激。
这是一个功能齐全的例子:
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import java.util.ArrayList;
import java.util.List;
public class FormLoginDemo
{
public static void main(String args[])
{
try
{
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet("http://www.articlepub.com/wp-login.php");
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
System.out.println("Login form get: " + response.getStatusLine());
if (entity != null) {
EntityUtils.consume(entity);
}
System.out.println("Initial set of cookies:");
List<Cookie> cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
System.out.println("None");
} else {
for (Cookie cooky : cookies) {
System.out.println("- " + cooky.toString());
}
}
HttpPost httpost = new HttpPost("http://www.articlepub.com/wp-login.php");
List <NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("log", "***********"));
nvps.add(new BasicNameValuePair("pwd", "***********"));
nvps.add(new BasicNameValuePair("rememberme", "forever"));
nvps.add(new BasicNameValuePair("redirect_to", "http://some-wp-site.com/wp-admin/"));
nvps.add(new BasicNameValuePair("testcookie", "1"));
nvps.add(new BasicNameValuePair("wp-submit", "Log In"));
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
response = httpclient.execute(httpost);
entity = response.getEntity();
System.out.println("Login form get: " + response.getStatusLine());
if (entity != null) {
EntityUtils.consume(entity);
}
System.out.println("Post logon cookies:");
cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
System.out.println("None");
} else {
for (Cookie cooky : cookies) {
System.out.println("- " + cooky.toString());
}
}
HttpGet httpGet = new HttpGet("http://www.articlepub.com/wp-admin/");
response = httpclient.execute(httpGet);
entity = response.getEntity();
System.out.println("Page Contents: " + EntityUtils.toString(entity));
System.out.println("Login form get: " + response.getStatusLine());
if (entity != null) {
EntityUtils.consume(entity);
}
System.out.println("Post get cookies:");
cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
System.out.println("None");
} else {
for (Cookie cooky : cookies) {
System.out.println("- " + cooky.toString());
}
}
httpclient.getConnectionManager().shutdown();
} catch (Exception e) {
System.out.println(e);
}
}
}
答案 0 :(得分:2)
您需要设置httpclient来处理cookie,例如:
httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);