当前位置: 移动技术网 > IT编程>开发语言>Java > JAVA利用HttpClient进行POST请求(HTTPS)实例

JAVA利用HttpClient进行POST请求(HTTPS)实例

2019年07月22日  | 移动技术网IT编程  | 我要评论

最近,需要对客户的接口做一个包装,然后供自己公司别的系统调用,客户接口是用http url实现的,我想用httpclient包进行请求,同时由于请求的url是https的,为了避免需要证书,所以用一个类继承defaulthttpclient类,忽略校验过程。

1.写一个sslclient类,继承至httpclient

package com.pcmall.service.sale.miaomore.impl; 
 
import java.security.cert.certificateexception;  
import java.security.cert.x509certificate;  
import javax.net.ssl.sslcontext;  
import javax.net.ssl.trustmanager;  
import javax.net.ssl.x509trustmanager;  
import org.apache.http.conn.clientconnectionmanager;  
import org.apache.http.conn.scheme.scheme;  
import org.apache.http.conn.scheme.schemeregistry;  
import org.apache.http.conn.ssl.sslsocketfactory;  
import org.apache.http.impl.client.defaulthttpclient;  
//用于进行https请求的httpclient  
public class sslclient extends defaulthttpclient{  
  public sslclient() throws exception{  
    super();  
    sslcontext ctx = sslcontext.getinstance("tls");  
    x509trustmanager tm = new x509trustmanager() {  
        @override  
        public void checkclienttrusted(x509certificate[] chain,  
            string authtype) throws certificateexception {  
        }  
        @override  
        public void checkservertrusted(x509certificate[] chain,  
            string authtype) throws certificateexception {  
        }  
        @override  
        public x509certificate[] getacceptedissuers() {  
          return null;  
        }  
    };  
    ctx.init(null, new trustmanager[]{tm}, null);  
    sslsocketfactory ssf = new sslsocketfactory(ctx,sslsocketfactory.allow_all_hostname_verifier);  
    clientconnectionmanager ccm = this.getconnectionmanager();  
    schemeregistry sr = ccm.getschemeregistry();  
    sr.register(new scheme("https", 443, ssf));  
  }  
}  

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

package com.pcmall.service.sale.miaomore.impl; 
 
import java.util.arraylist;  
import java.util.iterator;  
import java.util.list;  
import java.util.map;  
import java.util.map.entry;  
import org.apache.http.httpentity;  
import org.apache.http.httpresponse;  
import org.apache.http.namevaluepair;  
import org.apache.http.client.httpclient;  
import org.apache.http.client.entity.urlencodedformentity;  
import org.apache.http.client.methods.httppost;  
import org.apache.http.message.basicnamevaluepair;  
import org.apache.http.util.entityutils;  
/* 
 * 利用httpclient进行post请求的工具类 
 */  
public class httpclientutil {  
  public string dopost(string url,map<string,string> map,string charset){  
    httpclient httpclient = null;  
    httppost httppost = null;  
    string result = null;  
    try{  
      httpclient = new sslclient();  
      httppost = new httppost(url);  
      //设置参数  
      list<namevaluepair> list = new arraylist<namevaluepair>();  
      iterator iterator = map.entryset().iterator();  
      while(iterator.hasnext()){  
        entry<string,string> elem = (entry<string, string>) iterator.next();  
        list.add(new basicnamevaluepair(elem.getkey(),elem.getvalue()));  
      }  
      if(list.size() > 0){  
        urlencodedformentity entity = new urlencodedformentity(list,charset);  
        httppost.setentity(entity);  
      }  
      httpresponse response = httpclient.execute(httppost);  
      if(response != null){  
        httpentity resentity = response.getentity();  
        if(resentity != null){  
          result = entityutils.tostring(resentity,charset);  
        }  
      }  
    }catch(exception ex){  
      ex.printstacktrace();  
    }  
    return result;  
  }  
}  

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

package com.pcmall.service.sale.miaomore.impl; 
 
import java.util.hashmap;  
import java.util.map;  
//对接口进行测试  
public class testmain {  
  private string url = "https://xxx.xxx.xxx/";  
  private string charset = "utf-8";  
  private httpclientutil httpclientutil = null;  
    
  public testmain(){  
    httpclientutil = new httpclientutil();  
  }  
    
  public void test(){  
    string httporgcreatetest = url + "xxx/xxx/delivery";  
    map<string,string> createmap = new hashmap<string,string>();  
    createmap.put("delivery_code","1d1qz222z22sm21a");  
    createmap.put("timestamp","1479198840000");  
    createmap.put("sign","f2109c333f3eade929f932e89703fa0f683d43eb");  
    string httporgcreatetestrtn = httpclientutil.dopost(httporgcreatetest,createmap,charset);  
    system.out.println("result:"+httporgcreatetestrtn);  
  }  
    
  public static void main(string[] args){  
    testmain main = new testmain();  
    main.test();  
  }  
}  

刚开始不是很明白basicnamevaluepair的用法,后来慢慢摸索了一下,发现basicnamevaluepair是存储键值对的类,当添加新的key和value值,它会自动给装换成http的格式,=和&符号,比如https://xxx.xxx.xxx/xxx/xxxx/delivery?delivery_code=dqzzsm2a×tamp=1479198840000&sign=f209c33feade99f93e8970fa0f68d3eb,我们都不用自己进行拼接和匹配了,个人觉得它用起来还是挺方便而且准确度也高,希望可以帮助到大家!

以上就是小编为大家带来的java利用httpclient进行post请求(https)实例全部内容了,希望大家多多支持移动技术网~

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网