zoukankan      html  css  js  c++  java
  • Java发送http get/post请求,调用接口/方法

    由于项目中要用,所以找了一些资料,整理下来。

    GitHub地址: https://github.com/iamyong    转自:http://blog.csdn.net/capmiachael/article/details/51833531

    例1:使用 HttpClient (commons-httpclient-3.0.jar 

     1 import java.io.ByteArrayInputStream;
     2 import java.io.ByteArrayOutputStream;
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 
     6 import org.apache.commons.httpclient.HttpClient;
     7 import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
     8 import org.apache.commons.httpclient.methods.PostMethod;
     9 import org.apache.commons.httpclient.methods.RequestEntity;
    10 
    11 public class HttpTool {
    12 
    13     /**
    14      * 发送post请求
    15      * 
    16      * @param params
    17      *            参数
    18      * @param requestUrl
    19      *            请求地址
    20      * @param authorization
    21      *            授权书
    22      * @return 返回结果
    23      * @throws IOException
    24      */
    25     public static String sendPost(String params, String requestUrl,
    26             String authorization) throws IOException {
    27 
    28         byte[] requestBytes = params.getBytes("utf-8"); // 将参数转为二进制流
    29         HttpClient httpClient = new HttpClient();// 客户端实例化
    30         PostMethod postMethod = new PostMethod(requestUrl);
    31         //设置请求头Authorization
    32         postMethod.setRequestHeader("Authorization", "Basic " + authorization);
    33         // 设置请求头  Content-Type
    34         postMethod.setRequestHeader("Content-Type", "application/json");
    35         InputStream inputStream = new ByteArrayInputStream(requestBytes, 0,
    36                 requestBytes.length);
    37         RequestEntity requestEntity = new InputStreamRequestEntity(inputStream,
    38                 requestBytes.length, "application/json; charset=utf-8"); // 请求体
    39         postMethod.setRequestEntity(requestEntity);
    40         httpClient.executeMethod(postMethod);// 执行请求
    41         InputStream soapResponseStream = postMethod.getResponseBodyAsStream();// 获取返回的流
    42         byte[] datas = null;
    43         try {
    44             datas = readInputStream(soapResponseStream);// 从输入流中读取数据
    45         } catch (Exception e) {
    46             e.printStackTrace();
    47         }
    48         String result = new String(datas, "UTF-8");// 将二进制流转为String
    49         // 打印返回结果
    50         // System.out.println(result);
    51 
    52         return result;
    53 
    54     }
    55 
    56     /**
    57      * 从输入流中读取数据
    58      * 
    59      * @param inStream
    60      * @return
    61      * @throws Exception
    62      */
    63     public static byte[] readInputStream(InputStream inStream) throws Exception {
    64         ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    65         byte[] buffer = new byte[1024];
    66         int len = 0;
    67         while ((len = inStream.read(buffer)) != -1) {
    68             outStream.write(buffer, 0, len);
    69         }
    70         byte[] data = outStream.toByteArray();
    71         outStream.close();
    72         inStream.close();
    73         return data;
    74     }
    75 }

    例2:

      1 import java.io.BufferedReader;  
      2 import java.io.IOException;
      3 import java.io.InputStream;  
      4 import java.io.InputStreamReader;  
      5 import java.io.OutputStreamWriter;
      6 import java.io.UnsupportedEncodingException;  
      7 import java.net.HttpURLConnection;  
      8 import java.net.InetSocketAddress;
      9 import java.net.Proxy;
     10 import java.net.URL; 
     11 import java.net.URLConnection;
     12 import java.util.List;
     13 import java.util.Map;
     14 
     15 /** 
     16  * Http请求工具类 
     17  */
     18 public class HttpRequestUtil {
     19     static boolean proxySet = false;
     20     static String proxyHost = "127.0.0.1";
     21     static int proxyPort = 8087;
     22     /** 
     23      * 编码 
     24      * @param source 
     25      * @return 
     26      */ 
     27     public static String urlEncode(String source,String encode) {  
     28         String result = source;  
     29         try {  
     30             result = java.net.URLEncoder.encode(source,encode);  
     31         } catch (UnsupportedEncodingException e) {  
     32             e.printStackTrace();  
     33             return "0";  
     34         }  
     35         return result;  
     36     }
     37     public static String urlEncodeGBK(String source) {  
     38         String result = source;  
     39         try {  
     40             result = java.net.URLEncoder.encode(source,"GBK");  
     41         } catch (UnsupportedEncodingException e) {  
     42             e.printStackTrace();  
     43             return "0";  
     44         }  
     45         return result;  
     46     }
     47     /** 
     48      * 发起http请求获取返回结果 
     49      * @param req_url 请求地址 
     50      * @return 
     51      */ 
     52     public static String httpRequest(String req_url) {
     53         StringBuffer buffer = new StringBuffer();  
     54         try {  
     55             URL url = new URL(req_url);  
     56             HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();  
     57 
     58             httpUrlConn.setDoOutput(false);  
     59             httpUrlConn.setDoInput(true);  
     60             httpUrlConn.setUseCaches(false);  
     61 
     62             httpUrlConn.setRequestMethod("GET");  
     63             httpUrlConn.connect();  
     64 
     65             // 将返回的输入流转换成字符串  
     66             InputStream inputStream = httpUrlConn.getInputStream();  
     67             InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");  
     68             BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  
     69 
     70             String str = null;  
     71             while ((str = bufferedReader.readLine()) != null) {  
     72                 buffer.append(str);  
     73             }  
     74             bufferedReader.close();  
     75             inputStreamReader.close();  
     76             // 释放资源  
     77             inputStream.close();  
     78             inputStream = null;  
     79             httpUrlConn.disconnect();  
     80 
     81         } catch (Exception e) {  
     82             System.out.println(e.getStackTrace());  
     83         }  
     84         return buffer.toString();  
     85     }  
     86 
     87     /** 
     88      * 发送http请求取得返回的输入流 
     89      * @param requestUrl 请求地址 
     90      * @return InputStream 
     91      */ 
     92     public static InputStream httpRequestIO(String requestUrl) {  
     93         InputStream inputStream = null;  
     94         try {  
     95             URL url = new URL(requestUrl);  
     96             HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();  
     97             httpUrlConn.setDoInput(true);  
     98             httpUrlConn.setRequestMethod("GET");  
     99             httpUrlConn.connect();  
    100             // 获得返回的输入流  
    101             inputStream = httpUrlConn.getInputStream();  
    102         } catch (Exception e) {  
    103             e.printStackTrace();  
    104         }  
    105         return inputStream;  
    106     }
    107 
    108 
    109     /**
    110      * 向指定URL发送GET方法的请求
    111      * 
    112      * @param url
    113      *            发送请求的URL
    114      * @param param
    115      *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    116      * @return URL 所代表远程资源的响应结果
    117      */
    118     public static String sendGet(String url, String param) {
    119         String result = "";
    120         BufferedReader in = null;
    121         try {
    122             String urlNameString = url + "?" + param;
    123             URL realUrl = new URL(urlNameString);
    124             // 打开和URL之间的连接
    125             URLConnection connection = realUrl.openConnection();
    126             // 设置通用的请求属性
    127             connection.setRequestProperty("accept", "*/*");
    128             connection.setRequestProperty("connection", "Keep-Alive");
    129             connection.setRequestProperty("user-agent",
    130                     "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    131             // 建立实际的连接
    132             connection.connect();
    133             // 获取所有响应头字段
    134             Map<String, List<String>> map = connection.getHeaderFields();
    135             // 遍历所有的响应头字段
    136             for (String key : map.keySet()) {
    137                 System.out.println(key + "--->" + map.get(key));
    138             }
    139             // 定义 BufferedReader输入流来读取URL的响应
    140             in = new BufferedReader(new InputStreamReader(
    141                     connection.getInputStream()));
    142             String line;
    143             while ((line = in.readLine()) != null) {
    144                 result += line;
    145             }
    146         } catch (Exception e) {
    147             System.out.println("发送GET请求出现异常!" + e);
    148             e.printStackTrace();
    149         }
    150         // 使用finally块来关闭输入流
    151         finally {
    152             try {
    153                 if (in != null) {
    154                     in.close();
    155                 }
    156             } catch (Exception e2) {
    157                 e2.printStackTrace();
    158             }
    159         }
    160         return result;
    161     }
    162 
    163     /**
    164      * 向指定 URL 发送POST方法的请求
    165      * 
    166      * @param url
    167      *            发送请求的 URL
    168      * @param param
    169      *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    170      * @param isproxy
    171      *               是否使用代理模式
    172      * @return 所代表远程资源的响应结果
    173      */
    174     public static String sendPost(String url, String param,boolean isproxy) {
    175         OutputStreamWriter out = null;
    176         BufferedReader in = null;
    177         String result = "";
    178         try {
    179             URL realUrl = new URL(url);
    180             HttpURLConnection conn = null;
    181             if(isproxy){//使用代理模式
    182                 @SuppressWarnings("static-access")
    183                 Proxy proxy = new Proxy(Proxy.Type.DIRECT.HTTP, new InetSocketAddress(proxyHost, proxyPort));
    184                 conn = (HttpURLConnection) realUrl.openConnection(proxy);
    185             }else{
    186                 conn = (HttpURLConnection) realUrl.openConnection();
    187             }
    188             // 打开和URL之间的连接
    189 
    190             // 发送POST请求必须设置如下两行
    191             conn.setDoOutput(true);
    192             conn.setDoInput(true);
    193             conn.setRequestMethod("POST");    // POST方法
    194 
    195 
    196             // 设置通用的请求属性
    197 
    198             conn.setRequestProperty("accept", "*/*");
    199             conn.setRequestProperty("connection", "Keep-Alive");
    200             conn.setRequestProperty("user-agent",
    201                     "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    202             conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    203 
    204             conn.connect();
    205 
    206             // 获取URLConnection对象对应的输出流
    207             out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
    208             // 发送请求参数
    209             out.write(param);
    210             // flush输出流的缓冲
    211             out.flush();
    212             // 定义BufferedReader输入流来读取URL的响应
    213             in = new BufferedReader(
    214                     new InputStreamReader(conn.getInputStream()));
    215             String line;
    216             while ((line = in.readLine()) != null) {
    217                 result += line;
    218             }
    219         } catch (Exception e) {
    220             System.out.println("发送 POST 请求出现异常!"+e);
    221             e.printStackTrace();
    222         }
    223         //使用finally块来关闭输出流、输入流
    224         finally{
    225             try{
    226                 if(out!=null){
    227                     out.close();
    228                 }
    229                 if(in!=null){
    230                     in.close();
    231                 }
    232             }
    233             catch(IOException ex){
    234                 ex.printStackTrace();
    235             }
    236         }
    237         return result;
    238     }    
    239 
    240     public static void main(String[] args) {
    241         //demo:代理访问
    242         String url = "http://api.adf.ly/api.php";
    243         String para = "key=youkeyid&youuid=uid&advert_type=int&domain=adf.ly&url=http://somewebsite.com";
    244 
    245         String sr=HttpRequestUtil.sendPost(url,para,true);
    246         System.out.println(sr);
    247     }
    248 
    249 }

    例3

     1 /**
     2      * 发送Http post请求
     3      * 
     4      * @param xmlInfo
     5      *            json转化成的字符串
     6      * @param URL
     7      *            请求url
     8      * @return 返回信息
     9      */
    10     public static String doHttpPost(String xmlInfo, String URL) {
    11         System.out.println("发起的数据:" + xmlInfo);
    12         byte[] xmlData = xmlInfo.getBytes();
    13         InputStream instr = null;
    14         java.io.ByteArrayOutputStream out = null;
    15         try {
    16             URL url = new URL(URL);
    17             URLConnection urlCon = url.openConnection();
    18             urlCon.setDoOutput(true);
    19             urlCon.setDoInput(true);
    20             urlCon.setUseCaches(false);
    21             urlCon.setRequestProperty("content-Type", "application/json");
    22             urlCon.setRequestProperty("charset", "utf-8");
    23             urlCon.setRequestProperty("Content-length",
    24                     String.valueOf(xmlData.length));
    25             System.out.println(String.valueOf(xmlData.length));
    26             DataOutputStream printout = new DataOutputStream(
    27                     urlCon.getOutputStream());
    28             printout.write(xmlData);
    29             printout.flush();
    30             printout.close();
    31             instr = urlCon.getInputStream();
    32             byte[] bis = IOUtils.toByteArray(instr);
    33             String ResponseString = new String(bis, "UTF-8");
    34             if ((ResponseString == null) || ("".equals(ResponseString.trim()))) {
    35                 System.out.println("返回空");
    36             }
    37             System.out.println("返回数据为:" + ResponseString);
    38             return ResponseString;
    39 
    40         } catch (Exception e) {
    41             e.printStackTrace();
    42             return "0";
    43         } finally {
    44             try {
    45                 out.close();
    46                 instr.close();
    47 
    48             } catch (Exception ex) {
    49                 return "0";
    50             }
    51         }
    52     }
  • 相关阅读:
    Linux下sed,awk,grep,cut,find学习笔记
    Python文件处理(1)
    KMP详解
    Java引用详解
    解决安卓中页脚被输入法顶起的问题
    解决swfupload上传控件文件名中文乱码问题 三种方法 flash及最新版本11.8.800.168
    null id in entry (don't flush the Session after an exception occurs)
    HQL中的Like查询需要注意的地方
    spring mvc controller间跳转 重定向 传参
    node to traverse cannot be null!
  • 原文地址:https://www.cnblogs.com/wdpnodecodes/p/7807027.html
Copyright © 2011-2022 走看看