Recientemente, necesito hacer un envoltorio en la interfaz del cliente y luego usar otras llamadas al sistema de mi empresa. La interfaz del cliente se implementa utilizando una URL HTTP. Quiero usar el paquete HTTPClient para realizar solicitudes. Al mismo tiempo, dado que la URL solicitada es HTTPS, para evitar la necesidad de un certificado, uso una clase para heredar la clase DefaUsThttpClient e ignorar el proceso de verificación.
1. Escribe una clase de sslclient y la heredé a httpclient
paquete 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; importar org.apache.http.conn.clientConnectionManager; importar org.apache.http.conn.scheme.scheme; importar org.apache.http.conn.scheme.schemeregistry; importar org.apache.http.conn.ssl.sslsocketfactory; importar org.apache.http.impl.client.defaulthttpClient; // httpClient utilizada para hacer solicitudes https de clase pública sslclient extiende defttpclient {public sslclient () lanza excepción {super (); SslContext ctx = sslContext.getInstance ("tls"); X509TrustManager tm = new X509TrustManager () {@Override public void checkClientTrusted (x509Certificate [] cadena, cadena authtype) lanza certificateException {} @Override public void checkServerRusted (x509Certificate [] cadena, cadena de cadena) lanza certificado de certificado {{} @overRusted @OverRusted X509Certificate [] getacceptedissuers () {return null; }}; ctx.init (nulo, new TrustManager [] {tm}, nulo); SslsocketFactory ssf = new sslsocketFactory (ctx, sslsocketfactory.how_all_hostname_verifier); ClientConnectionManager ccm = this.getConnectionManager (); Schemeregistry sr = ccm.getSchemeregistry (); Sr.register (nuevo esquema ("https", 443, ssf)); }}2. Escriba una clase que use httpclient para enviar solicitudes de publicación
paquete 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; importar org.apache.http.httpentity; importar org.apache.http.httpresponse; importar org.apache.http.nameValuePair; importar org.apache.http.client.httpclient; importar org.apache.http.client.entity.urlencodedformentity; importar org.apache.http.client.methods.httppost; importar org.apache.http.message.BasicNameValuePair; importar org.apache.http.util.entityutils; /** Clase de herramienta para solicitudes de publicación usando httpclient*/ public Httppost httppost = null; Resultado de cadena = nulo; intente {httpClient = new sslClient (); httppost = new httppost (url); // Establecer la lista de parámetros <NameValuePair> list = new ArrayList <NameValuePair> (); Iterador 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 (entidad); } HttpResponse respuesta = httpclient.execute (httppost); if (resentity! = null) {httpentity resentity = respuesta.getEntity (); if (resentity! = null) {result = entityUtil.ToString (resentity, charset); }}}} Catch (Exception Ex) {Ex.PrintStackTrace (); } resultado de retorno; }}3. Llame al código de prueba para una solicitud posterior
paquete com.pcmall.service.sale.miaomore.impl; import java.util.hashmap; import java.util.map; // prueba la interfaz public class testMain {private string url = "https://xxx.xxx.xxx/"; String private Charset = "UTF-8"; privado httpClientUtil httpClientUtil = null; public testMain () {httpClientUtil = new httpClientUtil (); } public void test () {String httporgCreateTest = url + "xxx/xxx/entrega"; Map <string, string> createMap = new Hashmap <String, String> (); createMap.put ("entrega_code", "1D1QZ222Z22SM21A"); createMap.put ("TimeStamp", "1479198840000"); createMap.put ("Sign", "F2109C333f3eade929f932e89703fa0f683d43eb"); Cadena httporgCreateTestrtn = httpclientutil.dopost (httporgcreateTest, createMap, charset); System.out.println ("Resultado:"+httporgcreateTestrtn); } public static void main (string [] args) {testMain main = new testMain (); main.test (); }}Al principio no entendí el uso de BasicNameValuePair. Más tarde, lo exploré lentamente y descubrí que BasicNameValuePair es una clase que almacena pares de valor clave. Al agregar nuevos valores de clave y valor, lo reemplazará automáticamente con formato http, = y y símbolos, como https://xxx.xxx.xxxx/xxx/xxxx/delivery?delivery_code=dqzzsm2a xtamp=147919840000&sign=f209c33feade99f93e8970fa0f68d3eb. No tenemos que empalmar y combinarlo nosotros mismos. Personalmente, creo que es bastante conveniente y preciso de usar. ¡Espero que pueda ayudar a todos!
Lo anterior es todo el contenido de la instancia de solicitud de Java Post (HTTPS) que le presenta el editor. Espero que todos apoyen a Wulin.com ~