Baru -baru ini, saya perlu membuat pembungkus di antarmuka klien dan kemudian menggunakan panggilan sistem lain dari perusahaan saya. Antarmuka klien diimplementasikan menggunakan URL HTTP. Saya ingin menggunakan paket httpclient untuk membuat permintaan. Pada saat yang sama, karena URL yang diminta adalah HTTPS, untuk menghindari kebutuhan akan sertifikat, saya menggunakan kelas untuk mewarisi kelas DefaulthttpClient dan mengabaikan proses verifikasi.
1. Tulis kelas sslclient dan mewarisi ke httpclient
paket com.pcmall.service.sale.miaomore.impl; impor java.security.cert.certificateException; impor java.security.cert.x509certificate; impor javax.net.ssl.sslcontext; impor javax.net.ssl.trustManager; impor javax.net.ssl.x509trustManager; impor org.apache.http.conn.clientConnectionManager; impor org.apache.http.conn.scheme.scheme; impor org.apache.http.conn.scheme.schemeregistry; impor org.apache.http.conn.ssl.sslsocketFactory; impor org.apache.http.impl.client.defaulthttpClient; // httpclient digunakan untuk membuat permintaan https kelas publik sslclient meluas defaulthttpclient {public sslclient () melempar pengecualian {super (); Sslcontext ctx = sslcontext.getInstance ("tls"); X509TrustManager TM = X509TrustManager () {@Override public void checkClientTrusted (x509certificate [] rantai, string authType) melempar sertifikatException {} @Override public cerata publiccepted (x509certificception {} publictype publiccepted (x509certificed {} rantai publiccepted o.overRICECEPCEPTED (x509certifice {] @override @OncEpercepted oewinExceptipe { @Overlide @OverRICECCEPTED (STRINICECCEPTED (STRINICECCEPLECED {{x509 X509certificate [] getacceptedissuers () {return null; }}; ctx.init (null, trustManager baru [] {tm}, null); Sslsocketfactory ssf = sslsocketfactory baru (ctx, sslsocketfactory.allow_all_hostname_verifier); ClientConnectionManager ccm = this.getConnectionManager (); Schemeregistry sr = ccm.getschemeregistry (); sr.register (skema baru ("https", 443, ssf)); }}2. Tulis kelas yang menggunakan httpclient untuk mengirim permintaan pos
paket com.pcmall.service.sale.miaomore.impl; impor java.util.arraylist; impor java.util.iterator; impor java.util.list; impor java.util.map; impor java.util.map.entry; impor org.apache.http.httpentity; impor org.apache.http.httpresponse; impor org.apache.http.namevaluepair; impor org.apache.http.client.httpClient; impor org.apache.http.client.entity.urlencodedformentity; impor org.apache.http.client.methods.httppost; impor org.apache.http.message.basicnamevaluePair; impor org.apache.http.util.entityutils; /** Kelas Alat untuk Permintaan Pos Menggunakan httpClient*/ kelas publik httpclientutil {public string dopost (string url, peta <string, string> peta, string charset) {httpclient httpclient = null; Httppost httppost = null; Hasil string = null; coba {httpclient = sslclient baru (); httppost = httppost baru (url); // Atur daftar parameter <namevaluePair> Daftar = ArrayList baru <namevaluePair> (); Iterator iterator = map.entryset (). Iterator (); while (iterator.hasnext ()) {entri <string, string> elem = (entri <string, string>) iterator.next (); list.add (BasicNamevaluePair baru (elem.getKey (), elem.getValue ())); } if (list.size ()> 0) {UrlencodedFormentity entity = new UrlencodedFormentity (List, Charset); httppost.setentity (entitas); } Httpresponse response = httpclient.execute (httppost); if (resentity! = null) {httpentity resentity = response.getEntity (); if (resentity! = null) {result = entityutils.toString (resentity, charset); }}}} catch (exception ex) {ex.printstacktrace (); } hasil pengembalian; }}3. Hubungi kode uji untuk permintaan pos
paket com.pcmall.service.sale.miaomore.impl; impor java.util.hashmap; impor java.util.map; // uji antarmuka kelas publik testmain {private string url = "https://xxx.xxx.xxx/"; Private String charset = "UTF-8"; private httpclientutil httpclientutil = null; public testMain () {httpClientutil = httpClientutil baru (); } public void test () {string httporgCreateTest = url + "xxx/xxx/pengiriman"; Peta <string, string> createMap = new HashMap <string, string> (); createMap.put ("Delivery_Code", "1D1QZ22Z222SM21A"); createMap.put ("timestamp", "1479198840000"); createMap.put ("tanda", "F2109C333F3eAdE929F932E89703FA0F683D43EB"); String httporgcreateTestrtn = httpclientutil.dopost (httporgcreateTest, createMap, charset); System.out.println ("Hasil:"+httporgCreateTestrtn); } public static void main (string [] args) {testmain main = testmain baru (); main.test (); }}Pada awalnya saya tidak memahami penggunaan BasicNamevaluePair. Kemudian, saya perlahan-lahan menjelajahinya dan menemukan bahwa BasicNamEvaluePair adalah kelas yang menyimpan pasangan nilai kunci. Saat menambahkan tombol baru dan nilai, itu akan secara otomatis menggantinya dengan format http, = dan & simbol, seperti https://xxx.xxx.xxx/xxx/xxxx/delivery?delivery_code=dqzzsm2a×tamp=1479198840000&sign=f209c33feade99f93e8970fa0f68d3eB. Kami tidak perlu menyambungkan dan mencocokkannya sendiri. Saya pribadi berpikir itu cukup nyaman dan akurat untuk digunakan. Saya harap ini dapat membantu semua orang!
Di atas adalah seluruh konten dari instance Java Post Request (https) yang dibawa kepada Anda oleh editor. Saya harap semua orang akan mendukung wulin.com ~