เมื่อเร็ว ๆ นี้ฉันต้องทำ wrapper บนอินเทอร์เฟซของลูกค้าแล้วใช้การโทรระบบอื่นจาก บริษัท ของฉัน อินเทอร์เฟซไคลเอนต์ถูกนำมาใช้โดยใช้ URL HTTP ฉันต้องการใช้แพ็คเกจ httpClient เพื่อทำการร้องขอ ในเวลาเดียวกันเนื่องจาก URL ที่ร้องขอคือ HTTPS เพื่อหลีกเลี่ยงความต้องการใบรับรองฉันใช้คลาสเพื่อสืบทอดคลาส defaulthttpClient และละเว้นกระบวนการตรวจสอบ
1. เขียนคลาส sslclient และสืบทอดไปที่ httpclient
แพ็คเกจ com.pcmall.service.sale.miaomore.impl; นำเข้า java.security.cert.certificateException; นำเข้า java.security.cert.x509certificate; นำเข้า javax.net.ssl.sslcontext; นำเข้า Javax.net.ssl.TrustManager; นำเข้า Javax.net.ssl.x509trustManager; นำเข้า org.apache.http.conn.ClientConnectionManager; นำเข้า org.apache.http.conn.scheme.scheme; นำเข้า org.apache.http.conn.scheme.schemeregistry; นำเข้า org.apache.http.conn.ssl.sslsocketfactory; นำเข้า org.apache.http.impl.client.defaulthttpClient; // httpClient ใช้ในการร้องขอ HTTPS SSLClient ระดับสาธารณะขยาย defaulthttpClient {สาธารณะ sslClient () โยนข้อยกเว้น {super (); sslContext ctx = sslContext.getInstance ("TLS"); X509TrustManager TM = ใหม่ x509TrustManager () {@Override โมฆะสาธารณะ checkClientTrusted (x509Certificate [] โซ่, สตริง AuthType) พ่นใบรับรอง {} @Override public checkserverTrusted (x509Certificate [] x509Certificate [] getacceptedissuers () {return null; - ctx.init (null, new TrustManager [] {tm}, null); SSLSocketFactory SSF = ใหม่ SSLSocketFactory (CTX, SSLSocketFactory.allow_all_hostname_Verifier); clientConnectionManager ccm = this.getConnectionManager (); Schemeregistry SR = CCM.GetSchemeregistry (); Sr.Register (โครงการใหม่ ("HTTPS", 443, SSF)); -2. เขียนคลาสที่ใช้ httpClient เพื่อส่งคำขอโพสต์
แพ็คเกจ com.pcmall.service.sale.miaomore.impl; นำเข้า java.util.arraylist; นำเข้า java.util.iterator; นำเข้า java.util.list; นำเข้า java.util.map; นำเข้า java.util.map.entry; นำเข้า org.apache.http.htttentity; นำเข้า org.apache.http.httpresponse; นำเข้า org.apache.http.namevaluePair; นำเข้า org.apache.http.client.httpClient; นำเข้า org.apache.http.client.entity.urlencodedformentity; นำเข้า org.apache.http.client.methods.httppost; นำเข้า org.apache.http.message.basicnamevaluepair; นำเข้า org.apache.http.util.entityutils; /** คลาสเครื่องมือสำหรับการร้องขอโพสต์โดยใช้ httpClient*/ คลาสสาธารณะ httpClientutil {สตริงสาธารณะ dopost (สตริง url, แผนที่ <สตริง, สตริง> แผนที่, สตริง charset) {httpClient httpClient = null; httppost httppost = null; สตริงผลลัพธ์ = null; ลอง {httpClient = new sslClient (); httppost = ใหม่ httppost (url); // ตั้งค่ารายการพารามิเตอร์ <NameValuePair> list = new ArrayList <NameValuePair> (); ตัววนซ้ำ iterator = map.entryset (). iterator (); ในขณะที่ (iterator.hasnext ()) {entry <string, string> elem = (รายการ <string, string>) iterator.next (); list.add (ใหม่ BasicNameValuePair (elem.getKey (), elem.getValue ())); } if (list.size ()> 0) {urlencodedFormentity entity = ใหม่ urlencodedFormentity (list, charset); httppost.setEntity (เอนทิตี); } 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 (); } ผลตอบแทนผลลัพธ์; -3. โทรรหัสทดสอบสำหรับคำขอโพสต์
แพ็คเกจ com.pcmall.service.sale.miaomore.impl; นำเข้า java.util.hashmap; นำเข้า java.util.map; // ทดสอบอินเตอร์เฟสการทดสอบคลาสสาธารณะ {url สตริงส่วนตัว = "https://xxx.xxx.xxx/"; สตริงส่วนตัว charset = "utf-8"; httpClientUtil ส่วนตัว httpClientUtil = null; Public TestMain () {httpClientUtil = ใหม่ httpClientUtil (); } การทดสอบโมฆะสาธารณะ () {String httporGcreateTest = url + "xxx/xxx/delivery"; แผนที่ <สตริงสตริง> createMap = ใหม่ hashmap <สตริงสตริง> (); createMap.put ("delivery_code", "1d1qz2222z22sm21a"); createMap.put ("timestamp", "1479198840000"); createMap.put ("Sign", "F2109C333F3EADE929F932E89703FA0F683D43EB"); สตริง httporgcreateTestStn = httpClientutil.dopost (httporgcreateTest, createMap, charset); System.out.println ("ผลลัพธ์:"+httporgcreateTestntn); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {testmain main = testmain ใหม่ (); main.test (); -ตอนแรกฉันไม่เข้าใจการใช้งาน BasicAnmeValuePair ต่อมาฉันได้สำรวจอย่างช้าๆและพบว่า BasicNameValuePair เป็นคลาสที่เก็บคู่คีย์-ค่า เมื่อเพิ่มคีย์ใหม่และค่าค่ามันจะแทนที่โดยอัตโนมัติด้วยรูปแบบ http, = และ & สัญลักษณ์เช่น https://xxx.xxx.xxx/xxx/xxxx/delivery?delivery_code=dqzzsm2a xtamp=1479198840000&sign=f209c33feade99f93e8970FA0F68D3B เราไม่ต้องประกบและจับคู่กับตัวเอง โดยส่วนตัวแล้วฉันคิดว่ามันค่อนข้างสะดวกและแม่นยำในการใช้งาน ฉันหวังว่ามันจะช่วยทุกคน!
ข้างต้นเป็นเนื้อหาทั้งหมดของอินสแตนซ์ของ Java Post Request (HTTPS) ที่นำมาให้คุณโดยตัวแก้ไข ฉันหวังว่าทุกคนจะสนับสนุน wulin.com ~