首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

HttpClient 四

2012-06-30 
HttpClient 41、HttpClient使用GET方式通过代理服务器读取页面的例子import java.io.BufferedReaderimport

HttpClient 4
1、HttpClient使用GET方式通过代理服务器读取页面的例子

import java.io.BufferedReader;import java.io.InputStreamReader;import org.apache.http.HttpEntity;import org.apache.http.HttpHost;import org.apache.http.HttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.conn.params.ConnRoutePNames;import org.apache.http.impl.client.DefaultHttpClient;/*** HttpClient使用GET方式通过代理服务器读取页面的例子。*/public class HttpClientGet {public static void main(String[] args) throws Exception {DefaultHttpClient httpclient = new DefaultHttpClient();// 访问的目标站点,端口和协议HttpHost targetHost = new HttpHost("www.fronware.com");// 代理的设置HttpHost proxy = new HttpHost("192.168.10.111",80);httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);// 目标地址HttpGet httpget = new HttpGet("/");// 执行HttpResponse response = httpclient.execute(targetHost, httpget);HttpEntity entity = response.getEntity();System.out.println(response.getStatusLine());if (entity != null) {System.out.println("Response content length: "                        + entity.getContentLength());}// 显示结果BufferedReader reader = new BufferedReader(                new InputStreamReader(entity.getContent(), "UTF-8"));String line = null;while ((line = reader.readLine()) != null) {System.out.println(line);}if (entity != null) {entity.consumeContent();}}}


2、HttpClient 4 使用POST方式提交普通表单数据的例子
import java.io.BufferedReader;import java.io.InputStreamReader;import org.apache.http.HttpEntity;import org.apache.http.HttpHost;import org.apache.http.HttpResponse;import org.apache.http.client.methods.HttpPost;import org.apache.http.conn.params.ConnRoutePNames;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.DefaultHttpClient;/*** HttpClient 4 使用POST方式提交普通表单数据的例子.* */public class HttpClientPost {public static void main(String[] args) throws Exception {DefaultHttpClient httpclient = new DefaultHttpClient();// 代理的设置HttpHost proxy = new HttpHost("192.168.10.111",80);httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);// 目标地址HttpPost httppost = new HttpPost("http://fronware.com/RestService/login");System.out.println("请求: " + httppost.getRequestLine());// 构造最简单的字符串数据StringEntity reqEntity = new StringEntity("username=test&password=test");// 设置类型reqEntity.setContentType("application/x-www-form-urlencoded");// 设置请求的数据httppost.setEntity(reqEntity);// 执行HttpResponse response = httpclient.execute(httppost);HttpEntity entity = response.getEntity();if (entity != null) {System.out.println("Response content length: "                          + entity.getContentLength());}// 显示结果BufferedReader reader = new BufferedReader(                new InputStreamReader(entity.getContent(), "UTF-8"));String line = null;while ((line = reader.readLine()) != null) {System.out.println(line);}if (entity != null) {entity.consumeContent();}}}


3、HttpClient 4.0通过代理访问Https的代码例子
import java.io.BufferedReader;import java.io.InputStreamReader;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.methods.HttpGet;import org.apache.http.conn.params.ConnRoutePNames;import org.apache.http.impl.client.DefaultHttpClient;/*** HttpClient 4.0通过代理访问Https的代码例子。*/public class HttpsProxyGet {public static void main(String[] args) throws Exception {DefaultHttpClient httpclient = new DefaultHttpClient();// 认证的数据httpclient.getCredentialsProvider().setCredentials(                       new AuthScope("192.168.10.111", 80),new UsernamePasswordCredentials("username", "password"));// 访问的目标站点,端口和协议HttpHost targetHost = new HttpHost("www.google.com", 443, "https");// 代理的设置HttpHost proxy = new HttpHost("10.60.8.20", 8080);httpclient.getParams().setParameter(                ConnRoutePNames.DEFAULT_PROXY, proxy);// 目标地址HttpGet httpget = new HttpGet("/adsense/login/zh_CN/?");// 执行HttpResponse response = httpclient.execute(targetHost, httpget);HttpEntity entity = response.getEntity();System.out.println(response.getStatusLine());if (entity != null) {     System.out.println("Response content length: "                      + entity.getContentLength());}// 显示结果BufferedReader reader = new BufferedReader(                        new InputStreamReader(entity.getContent(), "UTF-8"));String line = null;while ((line = reader.readLine()) != null) {    System.out.println(line);}if (entity != null) {    entity.consumeContent();}}}


4、HttpClient读取页面的使用例子
import java.net.Socket;import org.apache.http.ConnectionReuseStrategy;import org.apache.http.Header;import org.apache.http.HttpHost;import org.apache.http.HttpResponse;import org.apache.http.HttpVersion;import org.apache.http.impl.DefaultConnectionReuseStrategy;import org.apache.http.impl.DefaultHttpClientConnection;import org.apache.http.message.BasicHttpRequest;import org.apache.http.params.BasicHttpParams;import org.apache.http.params.HttpParams;import org.apache.http.params.HttpProtocolParams;import org.apache.http.protocol.BasicHttpContext;import org.apache.http.protocol.BasicHttpProcessor;import org.apache.http.protocol.ExecutionContext;import org.apache.http.protocol.HttpContext;import org.apache.http.protocol.HttpRequestExecutor;import org.apache.http.protocol.RequestConnControl;import org.apache.http.protocol.RequestContent;import org.apache.http.protocol.RequestExpectContinue;import org.apache.http.protocol.RequestTargetHost;import org.apache.http.protocol.RequestUserAgent;import org.apache.http.util.EntityUtils;/*** HttpClient读取页面的使用例子*/public class HttpGet {public static void main(String[] args) throws Exception {HttpParams params = new BasicHttpParams();// HTTP 协议的版本,1.1/1.0/0.9HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);// 字符集HttpProtocolParams.setContentCharset(params, "UTF-8");// 伪装的浏览器类型// IE7 是 // Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)// Firefox3.03// Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.0.3)                    Gecko/2008092417 Firefox/3.0.3HttpProtocolParams.setUserAgent(params, "HttpComponents/1.1");HttpProtocolParams.setUseExpectContinue(params, true);BasicHttpProcessor httpproc = new BasicHttpProcessor();httpproc.addInterceptor(new RequestContent());httpproc.addInterceptor(new RequestTargetHost());httpproc.addInterceptor(new RequestConnControl());httpproc.addInterceptor(new RequestUserAgent());httpproc.addInterceptor(new RequestExpectContinue());HttpRequestExecutor httpexecutor = new HttpRequestExecutor();HttpContext context = new BasicHttpContext(null);//瞎写的...HttpHost host = new HttpHost("www.fronware.com", 80);DefaultHttpClientConnection conn = new DefaultHttpClientConnection();ConnectionReuseStrategy connStrategy = new DefaultConnectionReuseStrategy();context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);context.setAttribute(ExecutionContext.HTTP_TARGET_HOST, host);try {String[] targets = { "/", "/help.jsp" };for (int i = 0; i < targets.length; i++) {if (!conn.isOpen()) {Socket socket = new Socket(host.getHostName(), host.getPort());conn.bind(socket, params);}BasicHttpRequest request = new BasicHttpRequest("GET", targets[i]);System.out.println(">> Request URI: "                                + request.getRequestLine().getUri());context.setAttribute(ExecutionContext.HTTP_REQUEST, request);request.setParams(params);httpexecutor.preProcess(request, httpproc, context);HttpResponse response = httpexecutor.execute(request, conn, context);response.setParams(params);httpexecutor.postProcess(response, httpproc, context);// 返回码System.out.println("<< Response: " + response.getStatusLine());// 返回的文件头信息Header[] hs = response.getAllHeaders();for (Header h : hs) {System.out.println(h.getName() + ":" + h.getValue());}// 输出主体信息System.out.println(EntityUtils.toString(response.getEntity()));System.out.println("==============");if (!connStrategy.keepAlive(response, context)) {conn.close();} else {System.out.println("Connection  alive...");}}} finally {conn.close();}}}


5、httpclient中文乱码解决
        
         httpclient默认使用ISO-8859-1读取http响应的内容,如果内容中包含汉字的话
        
         就得动用丑陋的new String(str.getBytes("ISO-8859-1"),"GBK");语句了。

         解决办法就是使用以下配置。
       
        // httpclient读取内容时使用的字符集         private static final String CONTENT_CHARSET = "GBK";         HttpClient client = new HttpClient();         client.getParams().setParameter(         HttpMethodParams.HTTP_CONTENT_CHARSET, CONTENT_CHARSET);


6、HttpClient 4处理文件上传的例子(MultipartEntity)
import java.io.File;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.mime.MultipartEntity;import org.apache.http.entity.mime.content.FileBody;import org.apache.http.entity.mime.content.StringBody;import org.apache.http.impl.client.DefaultHttpClient;/*** HttpClient 4处理文件上传的例子(MultipartEntity).<br>* 需要 James Mime4j 0.5的版本,0.6的不行。*/public class HttpClientMultipartFormPost {public static void main(String[] args) throws Exception {HttpClient httpclient = new DefaultHttpClient();HttpPost httppost = new HttpPost("http://localhost");// 一个本地的文件FileBody bin = new FileBody(new File("d:/BIMG1181.JPG"));// 一个字符串StringBody comment = new StringBody("A binary file of some kind");// 多部分的实体MultipartEntity reqEntity = new MultipartEntity();// 增加reqEntity.addPart("bin", bin);reqEntity.addPart("comment", comment);// 设置httppost.setEntity(reqEntity);System.out.println("执行: " + httppost.getRequestLine());HttpResponse response = httpclient.execute(httppost);HttpEntity resEntity = response.getEntity();System.out.println("----------------------------------------");System.out.println(response.getStatusLine());if (resEntity != null) {System.out.println("返回长度: " + resEntity.getContentLength());}if (resEntity != null) {resEntity.consumeContent();}}}




热点排行