2011-03-13 61 views
0

有人可以幫我弄清楚如何將下面的curl命令翻譯成用於Android應用程序的Java語法?將curl命令翻譯成Java/Android

捲曲命令是:

 
curl -L -c cookie1 URL 

curl -L -c cookie2 -b cookie1 -d "loginId=NAME&password=PASSWORD&_eventId_submit=Submit" URL2 

curl -L -c cookie3 -b cookie2 -d "_eventId_submit=Submit" URL3 

具體地存儲和餅乾的發送功能。剩下的我可以管理,但我不確定如何存儲最初的GET響應的cookie,然後使用後續POST發送它,然後將該響應的cookie與最終的POST一起發送。

感謝

回答

1

這幾乎是工作......當我開始通過一個新的意圖的活動,餅乾立即擦拭。一旦我找到了一個更完整的解決方案,我會編輯這個答案,但是下面的確會生成所需的身份驗證cookie。

try {

 HttpGet httpget = new HttpGet("url1"); 
     client.getCookieStore().getCookies(); 
     HttpResponse response1 = client.execute(httpget); 
     HttpEntity entity1 = response1.getEntity(); 
     if (entity1 != null){ 
      entity1.consumeContent(); 
     } 
     if (cookies.isEmpty()) { 
      System.out.println("None"); 
     } else { 
      for (int i = 0; i < cookies.size(); i++) { 
       System.out.println("- " + cookies.get(i).toString()); 
       cookie = cookies.get(i); 
      } 
     } 


    } catch (ClientProtocolException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    try { 
     List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 
     nvps.add(new BasicNameValuePair("loginId", username.toString())); 
     nvps.add(new BasicNameValuePair("password", password.toString())); 
     nvps.add(new BasicNameValuePair("_eventId_submit", "Submit")); 

     HttpPost httppost = new HttpPost("url2"); 
     httppost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); 
     HttpParams params = httppost.getParams(); 
     HttpConnectionParams.setConnectionTimeout(params, 45000); 
     HttpConnectionParams.setSoTimeout(params, 45000); 

     // Perform the HTTP POST request 
     HttpResponse response = client.execute(httppost); 
     status = response.getStatusLine().toString(); 
     if (!status.contains("OK")) { 
      throw new HttpException(status); 
     } 

     if (cookies.isEmpty()) { 
      System.out.println("None"); 
     } else { 
      for (int i = 0; i < cookies.size(); i++) { 
       System.out.println("- " + cookies.get(i).toString()); 
       cookie = cookies.get(i); 
      } 
     } 


    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (HttpException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    try { 
     List<NameValuePair> nvps2 = new ArrayList<NameValuePair>(); 

     nvps2.add(new BasicNameValuePair("_eventId_submit", "Submit")); 

     HttpPost httppost2 = new HttpPost("url3"); 
     httppost2.setEntity(new UrlEncodedFormEntity(nvps2, HTTP.UTF_8)); 
     HttpParams params2 = httppost2.getParams(); 
     HttpConnectionParams.setConnectionTimeout(params2, 45000); 
     HttpConnectionParams.setSoTimeout(params2, 45000); 

     // Perform the HTTP POST request 
     HttpResponse response2 = client.execute(httppost2); 
     if (cookies.isEmpty()) { 
      System.out.println("None"); 
     } else { 
      for (int i = 0; i < cookies.size(); i++) { 
       System.out.println("- " + cookies.get(i).toString()); 
       cookie = cookies.get(i); 
       settings.setASCookie(cookie); 
      } 
     } 

     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

編輯:

我創建的擴展應用的應用類別及定義有我的DefaultHttpClient,然後在我的所有其他活動,我用的是客戶端的請求。這允許在我的應用程序中的所有活動中共享Cookie。