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

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

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

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

  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(null, new 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请求的类

  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请求的测试代码

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

原文:http://blog.csdn.net/rongyongfeikai2/article/details/41659353/#

JAVA利用HttpClient进行POST请求(HTTPS)的更多相关文章

  1. java利用HttpClient进行https接口调用

    1.为了避免需要证书,所以用一个类继承DefaultHttpClient类,忽略校验过程. import java.security.cert.CertificateException; import ...

  2. Java使用HttpClient实现Post请求

    http://www.cnblogs.com/mengrennwpu/p/6418114.html ******************************************* 基于项目需求 ...

  3. Java 利用HttpURLConnection发送http请求

    写了一个简单的 Http 请求的Class,实现了 get, post ,postfile package com.asus.uts.util; import org.json.JSONExcepti ...

  4. JAVA HttpClient进行POST请求(HTTPS)

    目前,要为另一个项目提供接口,接口是用HTTP URL实现的,最初的想法是另一个项目用jQuery post进行请求. 但是,很可能另一个项目是部署在别的机器上,那么就存在跨域问题,而jquery的p ...

  5. 如何使用JAVA请求HTTPS

    JDK对应的TLS版本(仅供参考) 1.写一个SSLClient类,继承至HttpClient import java.security.cert.CertificateException; impo ...

  6. Android 实现 HttpClient 请求Https

    如题,默认下,HttpClient是不能请求Https的,需要自己获取 private static final int SET_CONNECTION_TIMEOUT = 5 * 1000; priv ...

  7. [Java] 两种发起POST请求方法,并接收返回的响应内容的处理方式

    1.利用apache提供的commons-httpclient-3.0.jar包 代码如下: /** * 利用HttpClient发起POST请求,并接收返回的响应内容 * * @param url ...

  8. Java使用HttpClient上传文件

    Java可以使用HttpClient发送Http请求.上传文件等,非常的方便 Maven <dependency> <groupId>org.apache.httpcompon ...

  9. [转]java 关于httpclient 请求https (如何绕过证书验证)

    原文:http://www.blogjava.net/hector/archive/2012/10/23/390073.html 第一种方法,适用于httpclient4.X 里边有get和post两 ...

随机推荐

  1. Ajax提交数据的data序列化数据提交即可

    jQuery.ajax({ url: "<s:url value="/contractinfo/finanContractInfoMgrAction!saveOrMod.ac ...

  2. Spring Boot 项目部署到本地Tomcat,出现访问路径问题

    首先确定war 包没问题,把war包放在webapps目录下,访问http://localhost:8080/ + 项目名称 发现首页可以访问但css,js请求都是404,跳转页面也是404 解决方法 ...

  3. mysql数据库设计之三范式

    第一范式: 第二范式:   正解: 第三范式: 示例: 正解: BC范式: 示例: 正解:

  4. Disruptor源码分析

    本文将介绍Disruptor的工作机制,并分析Disruptor的主要源码 基于的版本是3.3.7(发布于2017.09.28) 水平有限,如有谬误请留言指正 0. 什么是Disruptor? Dis ...

  5. 山东省第八届省赛 A:Return of the Nim(尼姆+威佐夫)

    Problem Description Sherlock and Watson are playing the following modified version of Nim game: Ther ...

  6. C、C++ static 的作用

    1.隐藏 当同时编译多个文件时,所有未加static关键字的全局变量和函数都具有全局可见性. 例如:同时编译两个源文件 //ghz.c #include <stdio.h> char a ...

  7. 【wordpress】 $wpdb 应用实例

    <?php require_once('e:/php/wordpress/wp-blog-header.php');//注释掉这一句就出错了 global $wpdb; $a = $wpdb-& ...

  8. (18)python 打包发布

    1.安装 pyinstaller pip install pyinstaller 2.创建文件 pyinstaller yourprogram.py 试了半天总是报 TypeError: expect ...

  9. [BZOJ2125]最短路(圆方树DP)

    题意:仙人掌图最短路. 算法:圆方树DP,$O(n\log n+Q\log n)$ 首先建出仙人掌圆方树(与点双圆方树的区别在于直接连割边,也就是存在圆圆边),然后考虑点u-v的最短路径,显然就是:在 ...

  10. 【记忆化搜索】bzoj1079 [SCOI2008]着色方案

    #include<cstring> #include<cstdio> using namespace std; #define MOD 1000000007 typedef l ...