标签:远程 asn apache methods etc 遇到 service 发送 art
工作中会遇到远程调用接口,需要编写Http请求的共通类
以下是自己总结的Http请求代码
package com.gomecar.index.common.utils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.nio.charset.Charset; import java.util.*; public class HttpUtils { /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @param timeout 连接超时时间 /单位毫秒 * @return URL 所代表远程资源的响应结果 */ public static String sendGet(String url, String param,int timeout) { StringBuffer resultBuf = new StringBuffer(); BufferedReader in = null; try { String urlNameString = url + "?" + param; URL realUrl = new URL(urlNameString); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 // connection.setRequestProperty("accept", "*/*"); // connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setConnectTimeout(timeout); // 建立实际的连接 connection.connect(); // 获取所有响应头字段 // Map<String, List<String>> map = connection.getHeaderFields(); // 遍历所有的响应头字段 // for (String key : map.keySet()) { // System.out.println(key + "--->" + map.get(key)); // } // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(connection.getInputStream(), Charset.forName("UTF-8"))); String line; while ((line = in.readLine()) != null) { resultBuf.append(line); } } catch (Exception e) { // System.out.println("发送GET请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return resultBuf.toString(); } public static String assemParam(Map<String, Object> param) { Set<String> keys = param.keySet(); StringBuffer sb = new StringBuffer(); for (Iterator<String> iter = keys.iterator(); iter.hasNext();) { String key = iter.next(); sb.append(key); sb.append("="); sb.append(param.get(key)); if (iter.hasNext()) { sb.append("&"); } } return sb.toString(); } /** * 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param req * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @param timeout 连接超时时间 /单位毫秒 * @return 所代表远程资源的响应结果 */ public static String sendPost(String url, Map req,int timeout) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); conn.setRequestProperty("content-type", "text/json"); conn.setRequestProperty("method","POST"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); conn.setConnectTimeout(timeout);//连接超时时间 // 获取URLConnection对象对应的输出流 StringBuilder sb=new StringBuilder(); Iterator<String> iterator = req.keySet().iterator(); while (iterator.hasNext()) { String key=iterator.next().toString(); String val=req.get(key).toString(); sb.append(key); sb.append("="); sb.append(val); if (iterator.hasNext()) { sb.append("&"); } } out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(sb); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream(),Charset.forName("utf-8"))); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!"+e+" url="+url+" param="+req+" time="+timeout); e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } return result; } /** * 向指定 URL 发送POST方法的请求 * * @param url 发送请求的 URL * @param req 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果 */ public static String sendPost(String url, String json) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); conn.setRequestProperty("content-type", "text/json"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); conn.setConnectTimeout(5000);//连接超时时间 // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(json); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream(), Charset.forName("utf-8"))); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!"+e+" url="+url); e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } public static void main(String[] args) { // http://10.144.48.82/mobile_api/serviceApi?method=product.ProductService.getGoodsInfo&skuNo=8001019816 String re = new HttpUtils().sendGet("http://10.144.48.82/serviceApi", "method=product.getGoodsInfo&skuNo=8001019816",60); // System.out.println(re); } public String post(String url, String encoding, Map<String,String> map){ boolean checkFlag = false; HttpPost post = null; DefaultHttpClient httpClient = new DefaultHttpClient(); try { //String url = "http://localhost:8081/batchCates";//Constant.PERMISSION_URL; post = new HttpPost(url); List<BasicNameValuePair> postData = new ArrayList<BasicNameValuePair>(); for (Map.Entry<String, String> entry : map.entrySet()) { postData.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); //LOG.info(entry.getValue()); } UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postData,encoding); post.setEntity(entity); HttpResponse response = httpClient.execute(post); //LOG.info(System.currentTimeMillis() - startTime); HttpEntity resEntiy = response.getEntity(); String result = EntityUtils.toString(resEntiy); return result; } catch (Exception e) { e.printStackTrace(); } return ""; } }
标签:远程 asn apache methods etc 遇到 service 发送 art
原文地址:http://www.cnblogs.com/shoutn/p/7800937.html