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.     }

 

相关文章
|
27天前
|
关系型数据库 MySQL Docker
docker pull mysql:8.0.26提示Error response from daemon: Get “https://registry-1.docker.io/v2/“: EOF错误
docker pull mysql:8.0.26提示Error response from daemon: Get “https://registry-1.docker.io/v2/“: EOF错误
|
2月前
|
Ubuntu Linux Shell
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
485 68
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
|
2月前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
60 6
|
2月前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
107 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
4月前
|
Java
让星星⭐月亮告诉你,Java NIO之Buffer详解 属性capacity/position/limit/mark 方法put(X)/get()/flip()/compact()/clear()
这段代码演示了Java NIO中`ByteBuffer`的基本操作,包括分配、写入、翻转、读取、压缩和清空缓冲区。通过示例展示了`position`、`limit`和`mark`属性的变化过程,帮助理解缓冲区的工作原理。
63 2
|
4月前
|
小程序 Java
小程序通过get请求提交数据到java后台
小程序通过get请求提交数据到java后台
45 0
|
4月前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
172 1
java post/get 重定向问题
• java重定向 • 重定向get请求 • 重定向post请求
|
4天前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
45 14
|
7天前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
37 13

热门文章

最新文章