在 post 次请求后获取 cookie
Get cookies after post request
我正在尝试登录网站并存储 cookie,以便对进一步的请求进行身份验证。
我成功登录该站点并收到响应,但我无法正确存储 cookie。这是我用来登录的代码:
private String makePostRequest(String url, List<String> header_fields, List<String> header_values) {
String sessionCookie = "";
HttpResponse response = null;
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
//Post Data
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(header_fields.size());
for(int i = 0; i < header_fields.size(); i++){
nameValuePair.add(new BasicNameValuePair(header_fields.get(i), header_values.get(i)));
}
//Encoding POST data
try {
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
} catch (UnsupportedEncodingException e) {
// log exception
e.printStackTrace();
}
//making POST request.
try {
response = httpClient.execute(httpPost);
// write response to log
Log.d("Http Post Response:", response.toString());
} catch (ClientProtocolException e) {
// Log exception
e.printStackTrace();
} catch (IOException e) {
// Log exception
e.printStackTrace();
}
int statusCode = response.getStatusLine().getStatusCode();
InputStream is = null;
StringBuilder stringBuilder = new StringBuilder();
if (statusCode == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
if (entity != null) {
try {
is = entity.getContent();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
byte[] buffer = new byte[1024];
int length;
try {
while ((length = is.read(buffer)) > 0) {
stringBuilder.append(new String(buffer, 0, length));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
return stringBuilder.toString();
}
使用该代码我登录并获得响应字符串,我可以在其中看到我已成功登录。关于 cookie 的任何想法?无法让它工作。
更新
这是我用来获取会话 cookie 的代码
HttpGet httpGet = new HttpGet(url);
Header[] header=response.getHeaders("Set-Cookie");
for(int i =0; i < header.length; i++) {
httpGet.addHeader("Set-Cookie", (header[i].getValue()));
}
要从 HTTP 响应中获取 cookie,请执行
Header[] mCookies = response.getHeaders("cookie");
下一行之后
response = httpClient.execute(httpPost);
当您第一次请求时将 cookie 存储在共享首选项中
for (int i = 0; i < headers.length; i++) {
Header h = headers[i];
if (h.getName().equals("Set-Cookie")) {
cookie = h.getValue();
break;
}
}
正在发送另一个请求
if (!urlString.contains(Constants.URLPostfix.API_SIGNIN)) {
// we need to add cookies in header if it is not signin
cookie = App.preferenceGetString(SharedPreferenceKey.COOKIES, null);
httpPostRequest.setHeader("cookie", cookie);
}
谢谢
在这里我找到了适合我的解决方案。 WordPress api 我用过。
@Override
public void success(JsonObject jsonObject, Response response) {
List<Header> mCookies = response.getHeaders();
for (int i = 0; i <mCookies.size() ; i++) {
mCookies.get(i).getName();
Log.e("response-value", String.valueOf(mCookies.get(i).getName()) +":"+ String.valueOf(mCookies.get(i).getValue()));
if (mCookies.get(i).getName().equals("set-cookie")){
Log.e("response-value", String.valueOf(mCookies.get(i).getValue()));
}
}
}
}
我正在尝试登录网站并存储 cookie,以便对进一步的请求进行身份验证。
我成功登录该站点并收到响应,但我无法正确存储 cookie。这是我用来登录的代码:
private String makePostRequest(String url, List<String> header_fields, List<String> header_values) {
String sessionCookie = "";
HttpResponse response = null;
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
//Post Data
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(header_fields.size());
for(int i = 0; i < header_fields.size(); i++){
nameValuePair.add(new BasicNameValuePair(header_fields.get(i), header_values.get(i)));
}
//Encoding POST data
try {
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
} catch (UnsupportedEncodingException e) {
// log exception
e.printStackTrace();
}
//making POST request.
try {
response = httpClient.execute(httpPost);
// write response to log
Log.d("Http Post Response:", response.toString());
} catch (ClientProtocolException e) {
// Log exception
e.printStackTrace();
} catch (IOException e) {
// Log exception
e.printStackTrace();
}
int statusCode = response.getStatusLine().getStatusCode();
InputStream is = null;
StringBuilder stringBuilder = new StringBuilder();
if (statusCode == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
if (entity != null) {
try {
is = entity.getContent();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
byte[] buffer = new byte[1024];
int length;
try {
while ((length = is.read(buffer)) > 0) {
stringBuilder.append(new String(buffer, 0, length));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
return stringBuilder.toString();
}
使用该代码我登录并获得响应字符串,我可以在其中看到我已成功登录。关于 cookie 的任何想法?无法让它工作。
更新
这是我用来获取会话 cookie 的代码
HttpGet httpGet = new HttpGet(url);
Header[] header=response.getHeaders("Set-Cookie");
for(int i =0; i < header.length; i++) {
httpGet.addHeader("Set-Cookie", (header[i].getValue()));
}
要从 HTTP 响应中获取 cookie,请执行
Header[] mCookies = response.getHeaders("cookie");
下一行之后
response = httpClient.execute(httpPost);
当您第一次请求时将 cookie 存储在共享首选项中
for (int i = 0; i < headers.length; i++) {
Header h = headers[i];
if (h.getName().equals("Set-Cookie")) {
cookie = h.getValue();
break;
}
}
正在发送另一个请求
if (!urlString.contains(Constants.URLPostfix.API_SIGNIN)) {
// we need to add cookies in header if it is not signin
cookie = App.preferenceGetString(SharedPreferenceKey.COOKIES, null);
httpPostRequest.setHeader("cookie", cookie);
}
谢谢
在这里我找到了适合我的解决方案。 WordPress api 我用过。
@Override
public void success(JsonObject jsonObject, Response response) {
List<Header> mCookies = response.getHeaders();
for (int i = 0; i <mCookies.size() ; i++) {
mCookies.get(i).getName();
Log.e("response-value", String.valueOf(mCookies.get(i).getName()) +":"+ String.valueOf(mCookies.get(i).getValue()));
if (mCookies.get(i).getName().equals("set-cookie")){
Log.e("response-value", String.valueOf(mCookies.get(i).getValue()));
}
}
}
}