【问题标题】:Translating curl commands into Java/Android将 curl 命令翻译成 Java/Android
【发布时间】:2011-03-13 05:38:54
【问题描述】:

谁能帮我弄清楚如何将以下 curl 命令转换为 Java 语法以在 Android 应用程序中使用?

curl 命令是:

curl -L -c cookie1 网址 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

特别是 cookie 的存储和发送。其余的我可以管理,但我不确定如何存储初始 GET 响应的 cookie,然后将其与后续 POST 一起发送,然后将该响应的 cookie 与最终 POST 一起发送。

谢谢

【问题讨论】:

    标签: java android curl


    【解决方案1】:

    这几乎可以工作...当我通过新意图启动活动时,cookie 会立即被清除。一旦我想出一个更完整的解决方案,我将编辑这个答案,但以下确实会生成所需的身份验证 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();
            }
    

    编辑:

    我创建了一个扩展 Application 的应用程序类,并在那里定义了我的 DefaultHttpClient,然后在我的所有其他活动中,我使用该客户端进行请求。这允许在我的应用程序中的所有活动之间共享 cookie。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-20
      • 1970-01-01
      • 2017-06-10
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多