【问题标题】:Get cookies after post request发布请求后获取 cookie
【发布时间】:2019-10-04 19:21:48
【问题描述】:

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

【问题讨论】:

  • 执行后尝试List&lt;Cookie&gt; cookies = cookieStore.getCookies();
  • 无法解析符号 cookieStore
  • Header[] mCookies = response.getHeaders("cookie");
  • 当然它是0,因为你没有得到cookies,你正在创建实例。
  • 在线执行请求后`response = httpClient.execute(httpPost);`做Header[] mCookies = response.getHeaders("cookie");

标签: android http post cookies


【解决方案1】:

要从 HTTP 响应中获取 cookie,请执行以下操作

Header[] mCookies = response.getHeaders("cookie");

在下一行之后

response = httpClient.execute(httpPost);

【讨论】:

  • 这不是正确的答案,但你帮了我很多。我将在我的原始帖子中进行编辑并给出答案。
【解决方案2】:

当您在共享首选项中首次请求存储 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);

            }

谢谢

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2022-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多