Vor kurzem muss ich eine Wrapper auf der Benutzeroberfläche des Kunden erstellen und dann andere Systemanrufe von meinem Unternehmen verwenden. Die Client -Schnittstelle wird mithilfe einer HTTP -URL implementiert. Ich möchte das HTTPClient -Paket verwenden, um Anfragen zu stellen. Gleichzeitig, da die angeforderte URL HTTPS ist, verwende ich, um die Notwendigkeit eines Zertifikats zu vermeiden, eine Klasse, um die Defaulthttpclient -Klasse zu erben und den Überprüfungsprozess zu ignorieren.
1. Schreiben Sie eine SSLClient -Klasse und erben Sie sie an httpclient
Paket com.pcmall.service.sale.miaomore.impl; Java.security.cert.CertificateException; import Java.security.cert.x509certificate; importieren javax.net.ssl.sslcontext; importieren javax.net.ssl.trustmanager; importieren 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.defaushttpclient; // httpclient verwendet, um HTTPS -Anforderungen der öffentlichen Klasse SSLCLIENT zu erstellen. 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, neuer TrustManager [] {tm}, null); SSLSOCKETFACTORY SSF = NEU SSLSOCKETFACTORY (CTX, SSLSOCKETFACTORY.Allow_all_Hostname_verifier); ClientConnectionManager ccm = this.getConnectionManager (); Schemeregistry sr = ccm.getschemeregistry (); Sr.register (neues Schema ("https", 443, ssf)); }}2. Schreiben Sie eine Klasse, in der HTTPClient verwendet wird, um Postanfragen zu senden
Paket com.pcmall.service.sale.miaomore.impl; Import Java.util.ArrayList; Import Java.util.iterator; importieren 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.urlencoded forderity; import org.apache.http.client.methods.httppost; import org.apache.http.message.basicnamevaluepair; import org.apache.http.util.entityutils; /** Werkzeugklasse für Postanforderungen mit httpclient*/ public class httpclientUtil {public String dopost (String -URL, Karte <String, String> map, String charSet) {httpclient httpclient = null; Httppost httppost = null; String -Ergebnis = null; try {httpclient = new SSLCLIENT (); httppost = new httppost (URL); // Setzen Sie die Parameterliste <nameValuePair> list = new ArrayList <NameValuePair> (); Iterator iterator = map.EntrySet (). Iterator (); while (iterator.hasnext ()) {Eintrag <string, String> elem = (Eintrag <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 (resentity! = null) {httpentity reentity = response.getEntity (); if (resentity! }}}} catch (Ausnahme ex) {ex.printstacktrace (); } Rückgabeergebnis; }}3. Rufen Sie den Testcode für die Postanforderung an
Paket com.pcmall.service.sale.miaomore.impl; import Java.util.hashMap; import Java.util.map; // Testen Sie die Schnittstelle 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/lieferung"; Karte <String, String> createMap = new HashMap <String, String> (); createMap.put ("lieferung_code", "1d1qz222z22sm21a"); CreateMap.Put ("Timestamp", "1479198840000"); CreateMap.put ("Sign", "F2109C333f3eade929F932E89703FA0F683D43EB"); String httporgCreateTestRtn = httpclientUtil.dopost (httporgCreateTest, CreateMap, charset); System.out.println ("Ergebnis:"+httporgCreateTestRtn); } public static void main (String [] args) {testmain main = new testmain (); Main.Test (); }}Zuerst habe ich die Verwendung von BasicNamevaluePair nicht verstanden. Später erforschte ich es langsam und stellte fest, dass BasicNamevaluePair eine Klasse ist, die Schlüsselwertpaare speichert. Beim Hinzufügen neuer Schlüssel- und Wertwerte ersetzt es ihn automatisch durch HTTP -Format, = und & symbole, wie z. https://xxx.xxx.xxx/xxx/xxxx/delivery?delivery_code=dqzzsm2a xtamp=1479198840000&sign=f209c33FeeDe99f93e8970fa0f68d3eb. Wir müssen nicht spleißen und es selbst anpassen. Ich persönlich halte es für ziemlich bequem und genau zu verwenden. Ich hoffe es kann allen helfen!
Das obige ist der gesamte Inhalt der HTTPS -Instanz (Java Post Request), die Ihnen vom Herausgeber zur Verfügung gestellt wurde. Ich hoffe, jeder unterstützt Wulin.com ~