如何在安卓设备中使用curl?

3

我希望在开关点击监听器中使用curl命令发送OFF指令,并进行登录验证,类似于http://admin:1234@10.1.1.83/outlet?4=OFF

我在开关上设置了点击监听器,当点击监听器时,我会调用一个curl方法。

switch4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getRequest();

            }
        });

现在,getRequest()方法的代码如下...
public static String getRequest() {
       StringBuffer stringBuffer = new StringBuffer("");
       BufferedReader bufferedReader = null;
       try {
           HttpClient httpClient = new DefaultHttpClient();
           HttpPost httpPost = new HttpPost();

           URI uri = new URI("http://10.1.1.83/outlet?4=OFF");
           httpPost.setURI(uri);
           httpPost.addHeader(BasicScheme.authenticate(
                   new UsernamePasswordCredentials("admin", "1234"),
                   HTTP.UTF_8, false));

           HttpResponse httpResponse = httpClient.execute(httpPost);
           InputStream inputStream = httpResponse.getEntity().getContent();
           bufferedReader = new BufferedReader(new InputStreamReader(
                   inputStream));

           String readLine = bufferedReader.readLine();
           while (readLine != null) {
               stringBuffer.append(readLine);
               stringBuffer.append("\n");
               readLine = bufferedReader.readLine();
           }
       } catch (Exception e) {
           // TODO: handle exception
       } finally {
           if (bufferedReader != null) {
               try {
                   bufferedReader.close();
               } catch (IOException e) {
                   // TODO: handle exception
               }
           }
       }
       return stringBuffer.toString();
   }

2
那问题是什么? - bezet
我想在安卓中使用curl。 - Devyani Kotadiya
  1. 你需要使用线程进行网络编程。
  2. 不要使用DefaultHttpClient,因为它已经过时了。请改用UrlConnection:https://developer.android.com/reference/java/net/URLConnection.html
- egoldx
我的curl命令:curl http://admin:1234@10.1.1.83/outlet?4=OFF - Devyani Kotadiya
1
我想在Android中使用curl -- 我不知道是否有libcurl的端口适用于Android,但可能会有。 "阅读我的代码和描述" -- 您的代码和描述中没有包含问题。如果您的问题是“我该如何做到这一点?”,请解释您尝试过什么以及遇到了什么具体问题。 - CommonsWare
显示剩余2条评论
1个回答

2
您可以使用带有用户名和密码凭据的httpget方法。这里我向您展示该方法。
public static String getRequest() {
    StringBuffer stringBuffer = new StringBuffer("");
    BufferedReader bufferedReader = null;
try {
        HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet();

        URI uri = new URI("http://10.1.1.83/outlet?2=OFF");
        httpGet.setURI(uri);
        httpGet.addHeader(BasicScheme.authenticate(
new UsernamePasswordCredentials("admin", "1234"),
                HTTP.UTF_8, false));

        HttpResponse httpResponse = httpClient.execute(httpGet);
        InputStream inputStream = httpResponse.getEntity().getContent();
        bufferedReader = new BufferedReader(new InputStreamReader(
                inputStream));

        String readLine = bufferedReader.readLine();
while (readLine != null) {
            stringBuffer.append(readLine);
            stringBuffer.append("\n");
            readLine = bufferedReader.readLine();
        }
    } catch (Exception e) {
// TODO: handle exception
    } finally {
if (bufferedReader != null) {
try {
                bufferedReader.close();
            } catch (IOException e) {
// TODO: handle exception
            }
        }
    }
return stringBuffer.toString();
}

在你的脚本中使用这段代码,它会起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接