【发布时间】:2012-08-09 22:00:51
【问题描述】:
我想在发布请求后保存 cookie。 httpClient实现类:
public class JSONParser {
CookieStore store = new BasicCookieStore();
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
private static final DefaultHttpClient httpClient = new DefaultHttpClient() ;
public static DefaultHttpClient getInstance() { return httpClient; }
public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {
// Making HTTP request
try {
CookieStore cookieStore = new BasicCookieStore();
// Create local HTTP context
HttpContext localContext = new BasicHttpContext();
// Bind custom cookie store to the local context
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
DefaultHttpClient httpClient = JSONParser.getInstance();
List<Cookie> cookies = httpClient.getCookieStore().getCookies();
httpClient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Android-AEApp,ID=2435743");
httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2109);
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
httpPost.setHeader("User-Agent","Android-AEApp,ID=2435743");
cookies = httpClient.getCookieStore().getCookies();
httpPost.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
httpPost.setHeader("Cookie", "PHPSESSID=lc89a2uu0rj6t2p219gc2cq4i2; path=/");
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
cookies = httpClient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
for (Cookie a : cookies)
cookieStore.addCookie(a);
} else {
for (Cookie a : cookies) {
cookieStore.addCookie(a);
System.out.println("- " + a.getValue().toString());
}
}
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
我为我的 DefaultHttpClient 创建了单音,并希望将其用于进一步的请求。当我尝试这样做时:
HttpResponse httpResponse = httpClient.execute(httpPost, localContext);
我没有饼干。当我不包含 localContext 时,我可以使用
获取 cookie if (cookies.isEmpty()) {
for (Cookie a : cookies)
cookieStore.addCookie(a);
} else {
for (Cookie a : cookies) {
cookieStore.addCookie(a);
System.out.println("- " + a.getValue().toString());
}
}
但 cookie 不会在第二次请求时设置。我猜 - 原因是没有使用 localContext。告诉我有什么问题,如果 cookie 一直在变化,我该如何设置?
【问题讨论】:
标签: android http-post httpclient cookiestore