对服务器执行POST请求并从响应中获取特定cookie

时间:2012-05-24 01:42:10

标签: java android vb.net

我正在尝试将旧的VB.NET应用程序移植到Android应用程序,但由于我缺乏Java经验,我无法找到这个。我尝试了多种解决方案,但无济于事。

这个想法基本上是对'http://login.vk.com/'发出POST请求并获取响应cookie。 如果有人能给我一个关于如何在Android上使用cookies的提示,我会非常感激。

原始代码

    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

到目前为止编写的代码:

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

            }

2 个答案:

答案 0 :(得分:1)

尝试这种方式来获取cookie作为回应:

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

            }

答案 1 :(得分:0)

希望这能帮到你:

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