简体   繁体   中英

Doing a POST request to a server and getting a specific cookie from the response

I'm trying to port an old VB.NET application to an Android application, but due to my lack of Java experience I am unable to find this one out. I have tried multiple solutions but to no avail.

The idea is basically to do a POST request to 'http://login.vk.com/' and getting the response cookies. If anyone could give me a hint on how to work with cookies on Android I'd appreciate it very much.

Original Code

    Public Sub Login(ByVal Username As String, ByVal Password As String)
    Try

        ' Make request
        Dim cont As New CookieContainer
        Dim request As HttpWebRequest
        request = WebRequest.Create("http://login.vk.com/")
        request.Method = "POST"
        request.CookieContainer = cont

        ' Create POST content and send
        Dim postdata As String = "act=login&success_url=&fail_url=&try_to_login=1&to=&vk=&al_test=3&email=" & HttpUtility.UrlEncode(Username) & "&pass=" & HttpUtility.UrlEncode(Password) & "&expire="
        Dim postbytes() As Byte = System.Text.Encoding.UTF8.GetBytes(postdata)
        request.ContentType = "application/x-www-form-urlencoded"
        request.ContentLength = postbytes.Length
        Dim requestStream As Stream = request.GetRequestStream
        requestStream.Write(postbytes, 0, postbytes.Length)
        requestStream.Close()

        ' Get response and login cookie
        Dim response As HttpWebResponse = request.GetResponse
        Dim cookies As CookieCollection = request.CookieContainer.GetCookies(New Uri("http://pirate.vk.com"))
        For Each myCookie As Cookie In cookies
            If myCookie.Name = "remixsid" Then
                Me.Guid = myCookie.Value
            End If
        Next
        response.Close()

        ' Throw error if cookie not found
        If Not IsLoggedIn Then Throw New Exception("Invalid login guid")

    Catch ex As Exception
        Throw New Exception("Error at custom login", ex)
    End Try
End Sub

The code written so far:

                HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://login.vk.com/");

            try {
                List<NameValuePair> postData = new ArrayList<NameValuePair>(); 
                postData.add(new BasicNameValuePair("act", "login"));
                postData.add(new BasicNameValuePair("success_url", ""));
                postData.add(new BasicNameValuePair("fail_url", ""));
                postData.add(new BasicNameValuePair("try_to_login", "1"));
                postData.add(new BasicNameValuePair("to", ""));
                postData.add(new BasicNameValuePair("vk", ""));
                postData.add(new BasicNameValuePair("al_test", ""));
                postData.add(new BasicNameValuePair("email", URLEncoder.encode(username, "UTF-8")));
                postData.add(new BasicNameValuePair("pass", URLEncoder.encode(password, "UTF-8")));
                postData.add(new BasicNameValuePair("expire", ""));
                httppost.setEntity(new UrlEncodedFormEntity(postData));

                HttpResponse response = httpclient.execute(httppost);

            } catch(Exception e) {

            }

try this way to get cookies in response:

private static HttpParams params;
params = new BasicHttpParams();
HttpClientParams.setRedirecting(params, false);
HttpClientParams.setCookiePolicy(params, CookiePolicy.BROWSER_COMPATIBILITY);
HttpClient httpclient = new DefaultHttpClient(params);

HttpPost httppost = new HttpPost("http://login.vk.com/");

            try {
                List<NameValuePair> postData = new ArrayList<NameValuePair>(); 
                postData.add(new BasicNameValuePair("act", "login"));
                postData.add(new BasicNameValuePair("success_url", ""));
                postData.add(new BasicNameValuePair("fail_url", ""));
                postData.add(new BasicNameValuePair("try_to_login", "1"));
                postData.add(new BasicNameValuePair("to", ""));
                postData.add(new BasicNameValuePair("vk", ""));
                postData.add(new BasicNameValuePair("al_test", ""));
                postData.add(new BasicNameValuePair("email", URLEncoder.encode(username, "UTF-8")));
                postData.add(new BasicNameValuePair("pass", URLEncoder.encode(password, "UTF-8")));
                postData.add(new BasicNameValuePair("expire", ""));
                httppost.setEntity(new UrlEncodedFormEntity(postData));

                HttpResponse response = httpclient.execute(httppost);
                List<Cookie> cookies = ((DefaultHttpClient)httpclient).getCookieStore().getCookies();
                for(Cookie cookie : cookies){
                Log.i("Cookie", cookie.toString());
             }

            } catch(Exception e) {

            }

Hope this help you:

    HttpURLConnection urlConn = null;
//edit String data as what you want
    String data = "act=login&success_url=&fail_url=&try_to_login=1&to=&vk=&al_test=3&email=" & URLEncoder.encode(username, "UTF-8")) & "&pass=" & URLEncoder.encode(password, "UTF-8")) & "&expire="
        URL mUrl;
        StringBuffer response = new StringBuffer(); 
        try {               
            mUrl = new URL("http://login.vk.com/");
            urlConn = (HttpURLConnection) mUrl.openConnection();
            urlConn.setRequestMethod("POST");
            //query is your body
            urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");            
            urlConn.setRequestProperty("Content-Length", Integer.toString(data.length()));
            urlConn.setUseCaches (false);
            urlConn.setDoInput(true);
            urlConn.setDoOutput(true);

            //send request
            DataOutputStream wr = new DataOutputStream (
                    urlConn.getOutputStream ());
            wr.write(data.getBytes("UTF8"));
            wr.flush ();
            wr.close ();

            //Get Response  
            InputStream is = urlConn.getInputStream();
            BufferedReader rd = new BufferedReader(new InputStreamReader(is));
            String line;            
            while((line = rd.readLine()) != null) {
              response.append(line);
              response.append('\r');
            }
            rd.close();
            String result = response.toString();
            return result;
        } catch (MalformedURLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {

              if(urlConn != null) {
                  urlConn.disconnect(); 
              }
        }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM