Java4Android之HttpClient入门使用代码集

来源:互联网 发布:wp.js 编辑:程序博客网 时间:2024/06/06 15:47

本文将从代码的角度去引导如何使用httpclient的各个功能和特性。

第一个程序

import org.apache.commons.httpclient.*;import org.apache.commons.httpclient.methods.*;import org.apache.commons.httpclient.params.HttpMethodParams;import java.io.*;public class HttpClientTutorial {    private static String url = "http://www.apache.org/";  public static void main(String[] args) {    // Create an instance of HttpClient.    HttpClient client = new HttpClient();    // Create a method instance.    GetMethod method = new GetMethod(url);        // Provide custom retry handler is necessary    method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,     new DefaultHttpMethodRetryHandler(3, false));    try {      // Execute the method.      int statusCode = client.executeMethod(method);      if (statusCode != HttpStatus.SC_OK) {        System.err.println("Method failed: " + method.getStatusLine());      }      // Read the response body.      byte[] responseBody = method.getResponseBody();      // Deal with the response.      // Use caution: ensure correct character encoding and is not binary data      System.out.println(new String(responseBody));    } catch (HttpException e) {      System.err.println("Fatal protocol violation: " + e.getMessage());      e.printStackTrace();    } catch (IOException e) {      System.err.println("Fatal transport error: " + e.getMessage());      e.printStackTrace();    } finally {      // Release the connection.      method.releaseConnection();    }    }}


模拟http网页登入

package org.apache.http.examples.client;import java.net.URI;import java.util.List;import org.apache.http.HttpEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpUriRequest;import org.apache.http.client.methods.RequestBuilder;import org.apache.http.cookie.Cookie;import org.apache.http.impl.client.BasicCookieStore;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;/** * A example that demonstrates how HttpClient APIs can be used to perform * form-based logon. */public class ClientFormLogin {    public static void main(String[] args) throws Exception {        BasicCookieStore cookieStore = new BasicCookieStore();        CloseableHttpClient httpclient = HttpClients.custom()                .setDefaultCookieStore(cookieStore)                .build();        try {            HttpGet httpget = new HttpGet("https://someportal/");            CloseableHttpResponse response1 = httpclient.execute(httpget);            try {                HttpEntity entity = response1.getEntity();                System.out.println("Login form get: " + response1.getStatusLine());                EntityUtils.consume(entity);                System.out.println("Initial set of cookies:");                List<Cookie> cookies = cookieStore.getCookies();                if (cookies.isEmpty()) {                    System.out.println("None");                } else {                    for (int i = 0; i < cookies.size(); i++) {                        System.out.println("- " + cookies.get(i).toString());                    }                }            } finally {                response1.close();            }            HttpUriRequest login = RequestBuilder.post()                    .setUri(new URI("https://someportal/"))                    .addParameter("IDToken1", "username")                    .addParameter("IDToken2", "password")                    .build();            CloseableHttpResponse response2 = httpclient.execute(login);            try {                HttpEntity entity = response2.getEntity();                System.out.println("Login form get: " + response2.getStatusLine());                EntityUtils.consume(entity);                System.out.println("Post logon cookies:");                List<Cookie> cookies = cookieStore.getCookies();                if (cookies.isEmpty()) {                    System.out.println("None");                } else {                    for (int i = 0; i < cookies.size(); i++) {                        System.out.println("- " + cookies.get(i).toString());                    }                }            } finally {                response2.close();            }        } finally {            httpclient.close();        }    }}

多表单Post示例


/** * Example how to use multipart/form encoded POST request. */public class ClientMultipartFormPost {    public static void main(String[] args) throws Exception {        if (args.length != 1)  {            System.out.println("File path not given");            System.exit(1);        }        CloseableHttpClient httpclient = HttpClients.createDefault();        try {            HttpPost httppost = new HttpPost("http://localhost:8080" +                    "/servlets-examples/servlet/RequestInfoExample");            FileBody bin = new FileBody(new File(args[0]));            StringBody comment = new StringBody("A binary file of some kind", ContentType.TEXT_PLAIN);            HttpEntity reqEntity = MultipartEntityBuilder.create()                    .addPart("bin", bin)                    .addPart("comment", comment)                    .build();            httppost.setEntity(reqEntity);            System.out.println("executing request " + httppost.getRequestLine());            CloseableHttpResponse response = httpclient.execute(httppost);            try {                System.out.println("----------------------------------------");                System.out.println(response.getStatusLine());                HttpEntity resEntity = response.getEntity();                if (resEntity != null) {                    System.out.println("Response content length: " + resEntity.getContentLength());                }                EntityUtils.consume(resEntity);            } finally {                response.close();            }        } finally {            httpclient.close();        }    }}

用ResponseHandler来简化对http response的处理和资源释放

/** * This example demonstrates the use of the {@link ResponseHandler} to simplify * the process of processing the HTTP response and releasing associated resources. */public class ClientWithResponseHandler {    public final static void main(String[] args) throws Exception {        CloseableHttpClient httpclient = HttpClients.createDefault();        try {            HttpGet httpget = new HttpGet("http://localhost/");            System.out.println("Executing request " + httpget.getRequestLine());            // Create a custom response handler            ResponseHandler<String> responseHandler = new ResponseHandler<String>() {                public String handleResponse(                        final HttpResponse response) throws ClientProtocolException, IOException {                    int status = response.getStatusLine().getStatusCode();                    if (status >= 200 && status < 300) {                        HttpEntity entity = response.getEntity();                        return entity != null ? EntityUtils.toString(entity) : null;                    } else {                        throw new ClientProtocolException("Unexpected response status: " + status);                    }                }            };            String responseBody = httpclient.execute(httpget, responseHandler);            System.out.println("----------------------------------------");            System.out.println(responseBody);        } finally {            httpclient.close();        }    }}

多线程环境下GET方法的使用示例

/** * An example that performs GETs from multiple threads. * */public class ClientMultiThreadedExecution {    public static void main(String[] args) throws Exception {        // Create an HttpClient with the ThreadSafeClientConnManager.        // This connection manager must be used if more than one thread will        // be using the HttpClient.        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();        cm.setMaxTotal(100);        CloseableHttpClient httpclient = HttpClients.custom()                .setConnectionManager(cm)                .build();        try {            // create an array of URIs to perform GETs on            String[] urisToGet = {                "http://hc.apache.org/",                "http://hc.apache.org/httpcomponents-core-ga/",                "http://hc.apache.org/httpcomponents-client-ga/",            };            // create a thread for each URI            GetThread[] threads = new GetThread[urisToGet.length];            for (int i = 0; i < threads.length; i++) {                HttpGet httpget = new HttpGet(urisToGet[i]);                threads[i] = new GetThread(httpclient, httpget, i + 1);            }            // start the threads            for (int j = 0; j < threads.length; j++) {                threads[j].start();            }            // join the threads            for (int j = 0; j < threads.length; j++) {                threads[j].join();            }        } finally {            httpclient.close();        }    }    /**     * A thread that performs a GET.     */    static class GetThread extends Thread {        private final CloseableHttpClient httpClient;        private final HttpContext context;        private final HttpGet httpget;        private final int id;        public GetThread(CloseableHttpClient httpClient, HttpGet httpget, int id) {            this.httpClient = httpClient;            this.context = new BasicHttpContext();            this.httpget = httpget;            this.id = id;        }        /**         * Executes the GetMethod and prints some status information.         */        @Override        public void run() {            try {                System.out.println(id + " - about to get something from " + httpget.getURI());                CloseableHttpResponse response = httpClient.execute(httpget, context);                try {                    System.out.println(id + " - get executed");                    // get the response body as an array of bytes                    HttpEntity entity = response.getEntity();                    if (entity != null) {                        byte[] bytes = EntityUtils.toByteArray(entity);                        System.out.println(id + " - " + bytes.length + " bytes read");                    }                } finally {                    response.close();                }            } catch (Exception e) {                System.out.println(id + " - error: " + e);            }        }    }}






0 0
原创粉丝点击