2011-03-13 54 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。