发送POST请求后获取cookies

3

我正在尝试登录网站并存储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()));
}

1
尝试执行List<Cookie> cookies = cookieStore.getCookies();之后。 - Murtaza Khursheed Hussain
1
Header[] mCookies = response.getHeaders("cookie"); - Murtaza Khursheed Hussain
1
当然是0,因为你没有获取cookies,而是创建了实例。 - Murtaza Khursheed Hussain
@MurtazaKhursheedHussain 我在这个领域还很新,我该如何在请求后获取cookies? - Aldridge1991
1
执行了代码行response = httpClient.execute(httpPost);之后,执行Header[] mCookies = response.getHeaders("cookie"); - Murtaza Khursheed Hussain
显示剩余4条评论
3个回答

2
获取HTTP响应中的cookies,请按照以下步骤操作:
Header[] mCookies = response.getHeaders("cookie");

在以下这行代码之后
response = httpClient.execute(httpPost);

这不是正确的答案,但你帮了我很多。我会在我的原始帖子中进行编辑并发布答案。 - Aldridge1991

0

当您第一次请求时-将Cookies存储在共享首选项中

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);

            }

谢谢


0

我在这里找到了适合我的解决方案。我使用了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()));
                            }
                        }


                        }

                    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接