I'm getting a HttpResponse
from a server when checking if a username or password is correct.
When I load the url
in a webview
I want the webView
to have the cookie (the answer I get with postData()
stored in the webView
.
I want the webView to pickup the cookie and load the url with that cookie stored in the webview.
I'm getting the response through.
public HttpResponse postData() {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("https://example.com/login.aspx");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("txtUsername", "user"));
nameValuePairs.add(new BasicNameValuePair("txtPassword", "123"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
String responseAsText = EntityUtils.toString(response.getEntity());
Log.v(TAG , "Response from req: " + responseAsText);
return responseAsText;
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
return null;
}
And I loadUrl with:
webView.loadUrl("http://a_page.com/getpage.aspx?p=home");
I guess I'm not really managing a cookie and I have no idea how to do so. Any suggestions or solutions?
You'll probably want to take a look at this solution: Android WebView Cookie Problem
Couple of comments which I found out from my experience and gave me headaches:
http
andhttps
urls are different. Setting a cookie forhttp://www.example.com
is different than setting a cookie forhttps://www.example.com
https://www.example.com/
works buthttps://www.example.com
does not work.CookieManager.getInstance().setCookie
is performing an asynchronous operation. So, if you load a url right away after you set it, it is not guaranteed that the cookies will have already been written. To prevent unexpected and unstable behaviours, use the CookieManager#setCookie(String url, String value, ValueCallback callback) (link) and start loading the url after the callback will be called.I hope my two cents save some time from some people so you won't have to face the same problems like I did.
Just wanna throw another way how this can be done. Not saying it is the best, but it is a way. You can use JavaScript to set cookies as well. Just override
onPageFinished
inWebViewClient
One thing with this approach: you will have to reload the webView. If anyone knows how to fix that, please comment.
It's quite simple really.
where
cookieString
is formatted the same as a more traditionalSet-Cookie
HTTP header, andbaseUrl
is the site the cookie should belong to.