几种常见的接口请求方式(GET、POST、SSL、SOCKET)

1、post请求

/**

* 向指定url发送post请求
* @param url:请求地址
* @param params:请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return result:接口返回报文
*/
public static String sendPost(String url,String params){
OutputStream out = null;
HttpURLConnection conn = null;
String result = "";
try{
URL readUrl = new URL(url);
//打开与url的连接
conn = (HttpURLConnection) readUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("content-type", "application/json");
conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
conn.setReadTimeout(60 * 1000); // 60s 超时时间
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
out = conn.getOutputStream();
out.write(params.getBytes("utf-8"));
out.flush();
out.close();
//获取返回结果
StringBuffer buffer = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));
String temp;
while ((temp = br.readLine())!=null) {
buffer.append(temp);
buffer.append("\n");
}
result = buffer.toString();
}catch(Exception e){
System.out.println("发送POST请求出现异常!" + e);
         e.printStackTrace();
}
return result;

}

2、GET请求

/**
* 发送get请求
* @param url
* @return
*/
public static String sendGet(String url){
String result = "";
BufferedReader in = null;
try{
URL realUrl = new URL(url);
// 打开和URL之间的连接
            URLConnection connection = realUrl.openConnection();
            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 建立实际的连接
            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(),"utf-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result += 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 result;
}

3、SSL请求

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
public class CustomizedHostnameVerifier implements HostnameVerifier  
{  
    @Override  
    public boolean verify(String arg0, SSLSession arg1)  
    {  
        return true;  
    }  

}

package com;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
public class MyX509TrustManager implements X509TrustManager { 
    public MyX509TrustManager() throws Exception { 

    } 
    /* 
     * Delegate to the default trust manager. 
     */ 
    public void checkClientTrusted(X509Certificate[] chain, String authType) 
                throws CertificateException { 
    } 
    /* 
     * Delegate to the default trust manager. 
     */ 
    public void checkServerTrusted(X509Certificate[] chain, String authType) 
                throws CertificateException { 
    } 
    /* 
     * Merely pass this through. 
     */ 
    public X509Certificate[] getAcceptedIssuers() {
        return new java.security.cert.X509Certificate[0];
    } 
}

/**
* SSL请求
* @param requestUrl  请求地址
* @param outputStr   请求报文
* @param requestMethod  POST 还是 GET
* @return
*/
public static String sendSSL(String requestUrl,String outputStr,String requestMethod){
StringBuffer buffer = new StringBuffer();    
try {  
System.setProperty ("jsse.enableSNIExtension", "false");  
            // 创建SSLContext对象,并使用我们指定的信任管理器初始化    
            TrustManager[] tm = { new MyX509TrustManager() };    
            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");    
            sslContext.init(null, tm, new java.security.SecureRandom());    
            // 从上述SSLContext对象中得到SSLSocketFactory对象    
            SSLSocketFactory ssf = sslContext.getSocketFactory(); 
            URL url = new URL(requestUrl);
//            URL url = new URL(null,requestUrl,new sun.net.www.protocol.https.Handler()); 使用这种
            HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();    
            httpUrlConn.setSSLSocketFactory(ssf);   
            httpUrlConn.setHostnameVerifier(new CustomizedHostnameVerifier());

            httpUrlConn.setDoOutput(true);    
            httpUrlConn.setDoInput(true);    
            httpUrlConn.setUseCaches(false);    
            // 设置请求方式(GET/POST)    
            httpUrlConn.setRequestMethod(requestMethod);
            httpUrlConn.setDoOutput(true);    
            httpUrlConn.setDoInput(true);    
            httpUrlConn.setUseCaches(false);    
            // 设置请求方式(GET/POST)    
            httpUrlConn.setRequestMethod(requestMethod);    
    
            if ("GET".equalsIgnoreCase(requestMethod))httpUrlConn.connect();
            
            // 当有数据需要提交时    
            if (null != outputStr) {    
                OutputStream outputStream = httpUrlConn.getOutputStream();    
                // 注意编码格式,防止中文乱码    
                outputStream.write(outputStr.getBytes("UTF-8"));    
                outputStream.close();    
            } 
            
            // 将返回的输入流转换成字符串    
            InputStream inputStream = httpUrlConn.getInputStream();    
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");    
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  
            
            String str = null;    
            while ((str = bufferedReader.readLine()) != null) {    
                buffer.append(str);    
            }    
            bufferedReader.close();    
            inputStreamReader.close();    
            // 释放资源    
            inputStream.close();    
            inputStream = null;    
            httpUrlConn.disconnect();    
            System.out.println("返回的数据:"+buffer.toString()); 
            
}catch(Exception e){
System.out.println("发送GET请求出现异常!" + e);
         e.printStackTrace();
}

return buffer.toString();

}

4、socket请求

/**
* socket请求
* @param spServerIp  ip地址   127.0.0.1
* @param spServerPort  端口号  10005
* @return
*/
public static String sendSocket(String spServerIp,int spServerPort){

String seriesNumer = new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime());
OutputStream out = null;
        Reader reader = null;
        Socket socket = null;
        StringBuffer sb = new StringBuffer();
try{
StringBuffer sb1 = new StringBuffer();
sb1.append(seriesNumer);
String body = sb1.toString();// 报文体
socket = new Socket();
        socket.setTcpNoDelay(false);
        socket.connect(new InetSocketAddress(spServerIp, spServerPort));
        socket.setSoTimeout(60000);// 设置超时时间
        out = socket.getOutputStream();
        out.write(body.getBytes());
        out.flush();
        // 写完以后进行读操作
        reader = new InputStreamReader(socket.getInputStream());
            char chars[] = new char[64];
            int len;
           
            while ((len = reader.read(chars)) != -1) {
                String temp = new String(chars, 0, len);
                sb.append(temp);
            }
            return sb.toString();
}catch(Exception e){
System.out.println("发送socket请求出现异常!" + e);
         e.printStackTrace();
}finally{
            try {
                if (out != null) {
                    out.close();
                }
                if (reader != null) {
                    reader.close();
                }
                if (socket != null) {
                    socket.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
return sb.toString();
}


  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值