JAVA利用HttpClient进行POST和GET请求(HTTPS)

简介: JAVA利用HttpClient进行POST和GET请求(HTTPS),原文地址http://www.bieryun.com/902.html 目前,要为另一个项目提供接口,接口是用HTTP URL实现的,最初的想法是另一个项目用JQuery post进行请求。

JAVA利用HttpClient进行POST和GET请求(HTTPS),原文地址http://www.bieryun.com/902.html

目前,要为另一个项目提供接口,接口是用HTTP URL实现的,最初的想法是另一个项目用JQuery post进行请求。

但是,很可能另一个项目是部署在别的机器上,那么就存在跨域问题,而JQuery的post请求是不允许跨域的。

这时,就只能够用HttpClient包进行请求了,同时由于请求的URL是HTTPS的,为了避免需要证书,所以用一个类继承DefaultHttpClient类,忽略校验过程。

1.写一个SSLClient类,继承至HttpClient

[java] view plain copy

print?

  1. import java.security.cert.CertificateException;
  2. import java.security.cert.X509Certificate;
  3. import javax.net.ssl.SSLContext;
  4. import javax.net.ssl.TrustManager;
  5. import javax.net.ssl.X509TrustManager;
  6. import org.apache.http.conn.ClientConnectionManager;
  7. import org.apache.http.conn.scheme.Scheme;
  8. import org.apache.http.conn.scheme.SchemeRegistry;
  9. import org.apache.http.conn.ssl.SSLSocketFactory;
  10. import org.apache.http.impl.client.DefaultHttpClient;
  11. //用于进行Https请求的HttpClient  
  12. public class SSLClient extends DefaultHttpClient{
  13.     public SSLClient() throws Exception{
  14.         super();
  15.         SSLContext ctx = SSLContext.getInstance("TLS");
  16.         X509TrustManager tm = new X509TrustManager() {
  17.                 @Override
  18.                 public void checkClientTrusted(X509Certificate[] chain,
  19.                         String authType) throws CertificateException {
  20.                 }
  21.                 @Override
  22.                 public void checkServerTrusted(X509Certificate[] chain,
  23.                         String authType) throws CertificateException {
  24.                 }
  25.                 @Override
  26.                 public X509Certificate[] getAcceptedIssuers() {
  27.                     return null;
  28.                 }
  29.         };
  30.         ctx.init(nullnew TrustManager[]{tm}, null);
  31.         SSLSocketFactory ssf = new SSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
  32.         ClientConnectionManager ccm = this.getConnectionManager();
  33.         SchemeRegistry sr = ccm.getSchemeRegistry();
  34.         sr.register(new Scheme("https"443, ssf));
  35.     }
  36. }

 

2.写一个利用HttpClient发送post请求的类

[java] view plain copy

print?

  1. import java.util.ArrayList;
  2. import java.util.Iterator;
  3. import java.util.List;
  4. import java.util.Map;
  5. import java.util.Map.Entry;
  6. import org.apache.http.HttpEntity;
  7. import org.apache.http.HttpResponse;
  8. import org.apache.http.NameValuePair;
  9. import org.apache.http.client.HttpClient;
  10. import org.apache.http.client.entity.UrlEncodedFormEntity;
  11. import org.apache.http.client.methods.HttpPost;
  12. import org.apache.http.message.BasicNameValuePair;
  13. import org.apache.http.util.EntityUtils;
  14. /* 
  15.  * 利用HttpClient进行post请求的工具类 
  16.  */
  17. public class HttpClientUtil {
  18.     public String doPost(String url,Map<String,String> map,String charset){
  19.         HttpClient httpClient = null;
  20.         HttpPost httpPost = null;
  21.         String result = null;
  22.         try{
  23.             httpClient = new SSLClient();
  24.             httpPost = new HttpPost(url);
  25.             //设置参数  
  26.             List<NameValuePair> list = new ArrayList<NameValuePair>();
  27.             Iterator iterator = map.entrySet().iterator();
  28.             while(iterator.hasNext()){
  29.                 Entry<String,String> elem = (Entry<String, String>) iterator.next();
  30.                 list.add(new BasicNameValuePair(elem.getKey(),elem.getValue()));
  31.             }
  32.             if(list.size() > 0){
  33.                 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,charset);
  34.                 httpPost.setEntity(entity);
  35.             }
  36.             HttpResponse response = httpClient.execute(httpPost);
  37.             if(response != null){
  38.                 HttpEntity resEntity = response.getEntity();
  39.                 if(resEntity != null){
  40.                     result = EntityUtils.toString(resEntity,charset);
  41.                 }
  42.             }
  43.         }catch(Exception ex){
  44.             ex.printStackTrace();
  45.         }
  46.         return result;
  47.     }
  48. }

 

3.调用post请求的测试代码

[java] view plain copy

print?

  1. import java.util.HashMap;
  2. import java.util.Map;
  3. //对接口进行测试  
  4. public class TestMain {
  5.     private String url = "https://192.168.1.101/";
  6.     private String charset = "utf-8";
  7.     private HttpClientUtil httpClientUtil = null;
  8.     public TestMain(){
  9.         httpClientUtil = new HttpClientUtil();
  10.     }
  11.     public void test(){
  12.         String httpOrgCreateTest = url + "httpOrg/create";
  13.         Map<String,String> createMap = new HashMap<String,String>();
  14.         createMap.put("authuser","*****");
  15.         createMap.put("authpass","*****");
  16.         createMap.put("orgkey","****");
  17.         createMap.put("orgname","****");
  18.         String httpOrgCreateTestRtn = httpClientUtil.doPost(httpOrgCreateTest,createMap,charset);
  19.         System.out.println("result:"+httpOrgCreateTestRtn);
  20.     }
  21.     public static void main(String[] args){
  22.         TestMain main = new TestMain();
  23.         main.test();
  24.     }
  25. }

 

4.GET的请求方式

[java] view plain copy

print?

  1. /**
  2.      * 发送get请求
  3.      * @param url       链接地址
  4.      * @param charset   字符编码,若为null则默认utf-8
  5.      * @return
  6.      */
  7.     public String doGet(String url,String charset){
  8.         if(null == charset){
  9.             charset = "utf-8";
  10.         }
  11.         HttpClient httpClient = null;
  12.         HttpGet httpGet= null;
  13.         String result = null;
  14.         try {
  15.             httpClient = new SSLClient();
  16.             httpGet = new HttpGet(url);
  17.             HttpResponse response = httpClient.execute(httpGet);
  18.             if(response != null){
  19.                 HttpEntity resEntity = response.getEntity();
  20.                 if(resEntity != null){
  21.                     result = EntityUtils.toString(resEntity,charset);
  22.                 }
  23.             }
  24.         } catch (Exception e) {
  25.             e.printStackTrace();
  26.         }
  27.         return result;
  28.     }

 

相关文章
|
2月前
|
安全 API 网络安全
使用OkHttp进行HTTPS请求的Kotlin实现
使用OkHttp进行HTTPS请求的Kotlin实现
|
5月前
|
Java
Java通过HttpClient从外部url下载文件到本地
该Java程序旨在通过URL将外部网络文件(如图片)下载至本地,并解决防盗链问题。首先,它通过`HttpGet`请求获取远程文件,并通过设置`Referer`头防止防盗链。然后,根据响应内容类型确定文件后缀并保存至指定路径。测试表明,程序能够成功下载文件。
655 8
Java通过HttpClient从外部url下载文件到本地
|
4月前
|
JSON 前端开发 JavaScript
java中post请求调用下载文件接口浏览器未弹窗而是返回一堆json,为啥
客户端调接口需要返回另存为弹窗,下载文件,但是遇到的问题是接口调用成功且不报错,浏览器F12查看居然返回一堆json,而没有另存为弹窗; > 正确的效果应该是:接口调用成功且浏览器F12不返回任何json,而是弹窗另存为窗口,直接保存文件即可。
194 2
|
3月前
|
安全 网络安全 数据安全/隐私保护
HTTPS 请求中的证书验证详解(Python版)
HTTPS 请求中的证书验证详解(Python版)
275 0
|
5月前
|
算法 Java 测试技术
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
|
6月前
|
缓存 网络协议 算法
(二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
作为一名程序员,尤其是Java程序员,那必须得了解并掌握HTTP/HTTPS相关知识。因为在如今计算机网络通信中,HTTP协议的作用功不可没,无论是日常上网追剧、冲���、亦或是接口开发、调用等,必然存在HTTP的“影子”在内。尤其对于WEB开发者而言,HTTP几乎是每天会打交道的东西。
116 10
|
6月前
|
安全 Java 网络安全
RestTemplate进行https请求时适配信任证书
RestTemplate进行https请求时适配信任证书
173 3
|
5月前
|
JavaScript 前端开发 Java
【Azure 环境】各种语言版本或命令,发送HTTP/HTTPS的请求合集
【Azure 环境】各种语言版本或命令,发送HTTP/HTTPS的请求合集
|
7月前
|
Web App开发 存储 网络安全
Charles抓包神器的使用,完美解决抓取HTTPS请求unknown问题
本文介绍了在 Mac 上使用的 HTTP 和 HTTPS 抓包工具 Charles 的配置方法。首先,强调了安装证书对于抓取 HTTPS 请求的重要性,涉及 PC 和手机端。在 PC 端,需通过 Charles 软件安装证书,然后在钥匙串访问中设置为始终信任。对于 iOS 设备,需设置 HTTP 代理,通过电脑上的 IP 和端口访问特定网址下载并安装证书,同时在设置中信任该证书。配置 Charles 包括设置代理端口和启用 SSL 代理。完成这些步骤后,即可开始抓包。文章还提及 Android 7.0 以上版本可能存在不信任用户添加 CA 证书的问题,但未提供解决办法。
1900 0
Charles抓包神器的使用,完美解决抓取HTTPS请求unknown问题
|
7月前
|
JSON 安全 Java
JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求
JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求
103 0