URL和HttpCore,HttpClien(不用DNS解析,直接访问使用域名访问的服务器)
2012-07-06 15:17:14 来源:WEB开发网核心提示:package com.feedao.util;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.InetAddress;import java.net.I
package com.feedao.util; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.Socket; import java.net.URL; import java.net.URLConnection; import java.util.Arrays; import org.apache.http.HttpResponse; import org.apache.http.HttpVersion; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.DefaultHttpClientConnection; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicHttpRequest; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.CoreConnectionPNames; 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.HttpContext; import org.apache.http.protocol.HttpProcessor; import org.apache.http.protocol.HttpRequestExecutor; import org.apache.http.util.EntityUtils; public class HttpUtil { /** * @param args */ public static void main(String[] args) { String url = "http://blocker.feedao.com:80/hessian/orderCancel"; URLTest(url, "102.17.13.49", 80); //testHttpClient String url2= "http://102.17.13.49:80/hessian/orderCancel"; testHttpClient(url2, "blocker.feedao.com"); // try { String re = getUrlResult("102.17.13.49", "blocker.feedao.com", "http://blocker.feedao.com:80/hessian/orderCancel"); System.out.println(re); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } // url http://blocker.feedao.com:80/hessian/orderCancel, ip:102.17.13.49, port:80 // 使用URL发送请求 private static void URLTest(String httpUrl, String ip, int port) { try { URL url = new URL(httpUrl); Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ip, port)); URLConnection conn = url.openConnection(proxy); conn.setDoOutput(true); conn.setDoInput(true); InputStream in = conn.getInputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); int bufferSize = 1024 * 1024; byte[] buffer = new byte[bufferSize];// 缓冲区 for (int bytesRead = 0; (bytesRead = in.read(buffer)) != -1;) { bos.write(buffer, 0, bytesRead); Arrays.fill(buffer, (byte) 0); } System.out.println(new String(bos.toByteArray(), "UTF-8")); in.close(); } catch (IOException e) { e.printStackTrace(); } } // url http://102.17.13.49:80/hessian/orderCancel, host:blocker.feedao.com // 使用HttpClient发送请求 private static boolean testHttpClient(String url, String host) { HttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet(url); if(host !=null && !host.isEmpty()) { httpget.addHeader("Host", host); } httpget.getParams().setParameter( CoreConnectionPNames.CONNECTION_TIMEOUT, 5000); try { HttpResponse response = httpclient.execute(httpget); int status = response.getStatusLine().getStatusCode(); if (status == 500 || status == 200) { String context = EntityUtils.toString(response.getEntity()); if (context.indexOf("only supports POST requests") >= 0) { return true; } } } catch (Exception e) { // e.printStackTrace(); } return false; } /** * * @param strIP 可以包含端口号192.168.0.1:8080 * @param domain * @param url * @return * @throws Exception */ public static String getUrlResult(String strIP, String domain, String url) throws Exception { String ip = strIP; int port = 80; if(strIP.contains(":")) { String[] ips = strIP.split(":"); ip = ips[0]; port = Integer.parseInt(ips[1]); } if(domain==null || domain.isEmpty()) { domain = ip; } return getUrlResult(ip, domain, url, port); } /** * 请求指定IP的域名下的Url地址 * @param strIP 例如:192.168.20.1 * @param domain 例如:www.360buy.com * @param url 例如:/index.html * @return 请求连接返回的数据,为空("")表示没有数据 * @throws Exception */ public static String getUrlResult(String strIP, String domain, String url, int port) throws Exception { String result = ""; // 设置Http协议参数信息 HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, "UTF-8"); HttpProtocolParams.setUserAgent(params, "Mozilla/5.0 (Windows NT 6.1)"); HttpProtocolParams.setHttpElementCharset(params, "UTF-8"); HttpProtocolParams.setUseExpectContinue(params, false); HttpProcessor httpproc = new BasicHttpProcessor(); HttpRequestExecutor httpexecutor = new HttpRequestExecutor(); HttpContext context = new BasicHttpContext(); // 创建Http连接对象,需要关闭连接conn.close() DefaultHttpClientConnection conn = new DefaultHttpClientConnection(); try { byte[] bytesIP = stringToBytes(strIP); InetAddress inetAddr = InetAddress.getByAddress(domain, bytesIP); // 创建socket对象 Socket socket = new Socket(inetAddr, port); conn.bind(socket, params); // 创建请求对象 BasicHttpRequest request = new BasicHttpRequest("GET", url, HttpVersion.HTTP_1_1); request.addHeader("Host", domain); request.addHeader("Connection", " Keep-Alive");//Close Keep-Alive // 执行请求 httpexecutor.preProcess(request, httpproc, context); HttpResponse response = httpexecutor.execute(request, conn, context); response.setParams(params); httpexecutor.postProcess(response, httpproc, context); // 获取返回结果 result = EntityUtils.toString(response.getEntity()); //关闭连接 conn.close(); } catch (Exception e) { // e.printStackTrace(); e.toString(); e.printStackTrace(System.out); } finally { conn.close(); } return result; } /** * 把字符串的IP转换成byte数组 * * @param ip 例如:192.168.20.1 * @return */ public static byte[] stringToBytes(String ip) { String dotIP = ip.replace('.', ','); // 把IP中的点符号替换成逗号,便于拆分 String[] nums = dotIP.split(","); byte[] bytesIP = { (byte) Integer.parseInt(nums[0]), (byte) Integer.parseInt(nums[1]), (byte) Integer.parseInt(nums[2]), (byte) Integer.parseInt(nums[3]) }; return bytesIP; } /** * 把byte数组转换成字符串 * * @param bytes * @return */ public static String bytesToString(byte[] bytes) { String strIP = (bytes[0] & 0xff) + "." + (bytes[1] & 0xff) + "." + (bytes[2] & 0xff) + "." + (bytes[3] & 0xff); return strIP; } }
- ››URL Rewrite实现jsp网站伪静态
- ››Url传参数被IE截断的解决方案
- ››URL和HttpCore,HttpClien(不用DNS解析,直接访问...
- ››url2bmp网页截图工具 命令行参数说明
- ››HttpClient4 Post XML到一个服务器上
- ››URL Rewrite(1):IIS与ASP.NET
- ››URL Rewrite(2):使用组件进行URL Rewrite
- ››URL Rewrite(3):在URL Rewrite后保持PostBack地...
- ››URL Rewrite(4):不同级别URL Rewrite的一些细节...
- ››URL编码转换,escape() encodeURI() encodeURIComp...
- ››httpclient3.0 上传文件名及field中文解决方法
- ››URLs,URIs,Proxies和Passwords 解析
更多精彩
赞助商链接