首页 文章

如何在HttpClient中做请求?

提问于
浏览
0

我使用jersey框架和java编写REST wed服务 . 如果用户想要在curl中请求HttpGet,他需要写如下:

curl -u username:password -H "Content-Type:application/...." http://localhost:8080/project/user

现在,我实现了android,它将调用web服务 . 有谁知道如何在Android中使用HttpClient来调用Web服务?如何在HttpClient中设置用户名和密码以匹配curl命令 -u username:password

谢谢

2 回答

  • 1

    @sudo尝试这个简单的代码

    HttpURLConnection conn = null;

    try {
            // The formated URL will be "http://www.androidcoder.org:80".
            URL url = new URL(String.format("http://%s:%d/%s", mIpAddress, mPort, mSubPage));
            conn = (HttpURLConnection) url.openConnection();
    
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Content-length", "0");
            conn.setUseCaches(false);
            conn.setAllowUserInteraction(false);
            conn.setConnectTimeout(TIMEOUT);
            conn.setReadTimeout(TIMEOUT);
    
            // NOTE: Below is used to perform the http authentication. It is working in JAVA but not
            // always working in Android platform.
    
            // Set to use the default HTTP authentication. Working in JAVA, but not working in
            // Android.
            Authenticator.setDefault(new Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("user1", "pass1".toCharArray());
                }
            });
            conn.connect();
    
            System.out.println(conn.getResponseCode()); // <-- The request will stop here if running
                                                        // in Android.
            System.out.println(conn.getResponseMessage());
    
            printOutput(conn);
    
        } catch (MalformedURLException e) {
            // TODO: Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // Operation timed out.
            System.out.println(e.getMessage());
            e.printStackTrace();
        } finally {
            if (conn != null) {
                conn.disconnect();
                conn = null;
            }
        }
    }
    
    /**
     * @brief print the output of the HTTP connection.
     * @param conn [in] Http connection.
     */
    private static void printOutput(HttpURLConnection conn) throws IOException {
        int length = 256;
        byte bytes[] = new byte[length];
        InputStream is = conn.getInputStream();
    
        while (is.available() > 0) {
    
            if (is.available() < length) {
                length = is.available();
            }
            conn.getInputStream().read(bytes, 0, length);
            System.out.println(bytes);
        }
    }
    
  • 2
    package com.android.demo;
    
    
    import org.apache.http.HttpEntity;
    
    import org.apache.http.HttpHost;
    
    import org.apache.http.HttpResponse;
    
    import org.apache.http.auth.AuthScope;
    
    import org.apache.http.auth.UsernamePasswordCredentials;
    
    import org.apache.http.client.HttpClient;
    
    import org.apache.http.client.methods.HttpGet;
    
    import org.apache.http.impl.auth.BasicScheme;
    
    import org.apache.http.impl.client.AbstractHttpClient;
    
    import org.apache.http.impl.client.DefaultHttpClient;
    
    import org.apache.http.protocol.BasicHttpContext;
    
    import org.apache.http.util.EntityUtils;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    public class MyActivity extends Activity{
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         /* START Test/Play with beanstalk API */
        String username = "user1";
        String host = "my.host.com";
        String password = "password";
    
        String urlBasePath = "http://" + username + ".host.com/api/";
        String urlApiCall_FindAllRepositories = urlBasePath
                + "repositories.xml";
    
        try {
            HttpClient client = new DefaultHttpClient();
    
            AuthScope as = new AuthScope(host, 443);
            UsernamePasswordCredentials upc = new UsernamePasswordCredentials(
                    username, password);
    
            ((AbstractHttpClient) client).getCredentialsProvider()
                    .setCredentials(as, upc);
    
            BasicHttpContext localContext = new BasicHttpContext();
    
            BasicScheme basicAuth = new BasicScheme();
            localContext.setAttribute("preemptive-auth", basicAuth);
    
            HttpHost targetHost = new HttpHost(host, 443, "https");
    
            HttpGet httpget = new HttpGet(urlApiCall_FindAllRepositories);
            httpget.setHeader("Content-Type", "application/xml");
    
            HttpResponse response = client.execute(targetHost, httpget,
                    localContext);
    
            HttpEntity entity = response.getEntity();
            Object content = EntityUtils.toString(entity);
    
    
    
        } catch (Exception e) {
            e.printStackTrace();
    
        }
    
    
    }
    }
    

    希望这段代码能有所帮助

相关问题