Récemment, j'ai besoin de faire un emballage sur l'interface du client, puis d'utiliser d'autres appels système de mon entreprise. L'interface client est implémentée à l'aide d'une URL HTTP. Je souhaite utiliser le package httpclient pour faire des demandes. Dans le même temps, puisque l'URL demandée est HTTPS, afin d'éviter la nécessité d'un certificat, j'utilise une classe pour hériter de la classe DefaulthTTPClient et ignorer le processus de vérification.
1. Écrivez une classe SSLClient et héritez-la à HttpClient
package com.pcmall.service.sale.miaomore.impl; Importer java.security.cert.certificateException; Importer java.security.cert.x509Certificate; import javax.net.ssl.sslcontext; import javax.net.ssl.trustManager; Importer 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; // httpClient utilisé pour faire des demandes https de classe publique SSLClient étend DefaulthTTPClient {public sslClient () lève une exception {super (); Sslcontext ctx = sslcontext.getInstance ("tls"); X509TrustManager tm = new X509TrustManager () {@Override public void CheckClientTruted (x509Certificate [] Chain, String AuthType) lance CertificateException {} @Override public Void CheckServerTruted (x509Certificate [] chaîne, chaîne authtype) throws certificat 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 (nouveau schéma ("https", 443, SSF)); }}2. Écrivez une classe qui utilise HttpClient pour envoyer des demandes de poste
package com.pcmall.service.sale.miaomore.impl; import java.util.arraylist; Importer java.util.iterator; Importer java.util.list; importation 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.urLencocedFormentity; import org.apache.http.client.methods.httppost; import org.apache.http.message.basicNameValuepair; import org.apache.http.util.entityutils; / * * Classe d'outils pour les demandes de publication à l'aide de httpclient * / classe publique httpClientUtil {public String doPost (string url, map <string, string> map, string charset) {httpClient httpclient = null; Httppost httppost = null; Résultat de chaîne = null; essayez {httpClient = new sslClient (); httppost = new httppost (URL); // Définissez la liste des paramètres <NameValuePair> list = new ArrayList <NameValuePair> (); Iterator iterator = map.entryset (). Iterator (); while (iterator.hasnext ()) {entrée <string, string> elem = (entrée <string, string>) iterator.next (); list.add (new BasicNameValuepair (elem.getKey (), elem.getValue ())); } if (list.size ()> 0) {UrLencodedFormentity Entity = new UrLenCodedFormentity (list, charset); httppost.sentity (entité); } HttpResponse Response = httpClient.Execute (httppost); if (Resentity! = null) {httpentity resentity = réponse.getEntity (); if (Resentity! = null) {result = entityUtils.tostring (Resentity, charset); }}}} catch (exception ex) {ex.printStackTrace (); } Retour Résultat; }}3. Appelez le code de test pour la demande de poste
package com.pcmall.service.sale.miaomore.impl; import java.util.hashmap; importation java.util.map; // Testez la classe publique de l'interface testmain {private String url = "https://xxx.xxx.xxx/"; String privé charset = "utf-8"; HttpClientUtil privé httpClientUtil = null; public testmain () {httpclientUtil = new httpclientUtil (); } public void test () {String httporgcreateTest = url + "xxx / xxx / livraison"; Map <string, string> createMap = new hashmap <string, string> (); createMap.put ("Delivery_Code", "1d1qz222z22sm21a"); CreateMap.put ("Timestamp", "1479198840000"); CreateMap.put ("Signe", "F2109C333F3EADE929F932E89703FA0F683D43EB"); String httporgcreateTetrtn = httpclientUtil.dopost (httorgcreateTest, CreateMap, charset); System.out.println ("Résultat:" + httporgCreateTestrtn); } public static void main (string [] args) {testmain main = new testmain (); main.test (); }}Au début, je ne comprenais pas l'utilisation de BasicNameValuepair. Plus tard, je l'ai lentement exploré et j'ai trouvé que BasicNameValuepair est une classe qui stocke les paires de valeurs clés. Lors de l'ajout de nouvelles valeurs de clé et de valeur, il le remplacera automatiquement par le format HTTP, = & & Symboles, tels que https://xxx.xxx.xxx/xxx/xxxx/delivery?delivery_code=dqzzsm2a ×tamp=147919884000000&sign=f209c33fade99f93e8970fa0f68d3eb. Nous n'avons pas à épisser et à l'associer nous-mêmes. Je pense personnellement que c'est assez pratique et précis à utiliser. J'espère que cela peut aider tout le monde!
Ce qui précède est l'intégralité du contenu de l'instance Java Post Request (HTTPS) qui vous est apportée par l'éditeur. J'espère que tout le monde soutiendra wulin.com ~