开发者

Set cookie from HTTP Request

开发者 https://www.devze.com 2023-01-16 00:27 出处:网络
I have get a correct login using HttpRequest to work. It prints the correc开发者_开发问答t html form of the logn page in my toast (just for testing). Now I want to set a cookie from that request. How

I have get a correct login using HttpRequest to work. It prints the correc开发者_开发问答t html form of the logn page in my toast (just for testing). Now I want to set a cookie from that request. How is this possible? If it necessary I can provide some code.

I already know about the CookieManager class, but how can I successfully do it?

Thanks in advance!

My code:

    public String getPostRequest(String url, String user, String pass) {
    HttpClient postClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost(url);
    HttpResponse response;

    try {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("login", user));
        nameValuePairs.add(new BasicNameValuePair("pass", pass));
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));      

        response = postClient.execute(httpPost);

        if(response.getStatusLine().getStatusCode() == 200) {
            HttpEntity entity = response.getEntity();

            if (entity != null) {
                InputStream instream = entity.getContent();  
                String result = convertStreamToString(instream);                   
                instream.close();             

                return result;      
            }
        }
    } catch (Exception e) {}
    Toast.makeText(getApplicationContext(),
            "Connection failed",
            Toast.LENGTH_SHORT).show();
    return null; 
}

private String convertStreamToString(InputStream is) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    return sb.toString();
}           

Well, this is pretty much it. convertStreamToString() function converts the InputStream into a String (plain HTML code), which I "toast" out to just test it (so it work), so the code is working though. Now to set the cookie. :-)

This is what I've reached for now:

// inside my if (entity != null) statement
List<Cookie> cookies = postClient.getCookieStore().getCookies();
String result = cookies.get(1).toString();
                    return result;

When I have logged in, the CookieList id 1 contains a value, otherwise the value is standard. So for now I know the difference in value, but how can I continue?


I think Android ships with Apache HttpClient 4.0.

You can check Chapter 3. HTTP state management topic from HttpClient Tutorial.

You can also refer similar questions on SO:

Android project using httpclient --> http.client (apache), post/get method

How do I manage cookies with HttpClient in Android and/or Java?

Also Check this example for usage: http://svn.apache.org/repos/asf/httpcomponents/httpclient/branches/4.0.x/httpclient/src/examples/org/apache/http/examples/client/ClientFormLogin.java

0

精彩评论

暂无评论...
验证码 换一张
取 消