في الآونة الأخيرة ، أحتاج إلى عمل غلاف على واجهة العميل ثم استخدام مكالمات النظام الأخرى من شركتي. يتم تنفيذ واجهة العميل باستخدام عنوان 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 {public sslclient () رمي الاستثناء {super () ؛ sslContext ctx = sslContext.getInstance ("tls") ؛ X509TRUSTMANAGER TM = جديد X509TRUSTMANAGER () 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.httpentity ؛ استيراد 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 {public string dopost (url string url ، map <string ، string> map ، string charset) {httpclient httpclient = null ؛ httppost httppost = null ؛ نتيجة السلسلة = فارغة ؛ حاول {httpclient = new sslclient () ؛ httppost = new httppost (url) ؛ // قم بتعيين قائمة المعلمات <AmeValUepair> قائمة = new ArrayList <MameValUepair> () ؛ iterator iterator = map.entryset (). iterator () ؛ بينما (iterator.hasNext ()) {entry <string ، string> elem = (entry <string ، string>) iterator.next () ؛ list.add (New BasicNameValuePair (elem.getkey () ، elem.getValue ())) ؛ } if (list.size ()> 0) {urlencodedformentity ictity = new 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 (استثناء ex) {ex.printStackTrace () ؛ } نتيجة الإرجاع ؛ }}3. اتصل برمز الاختبار لطلب النشر
حزمة com.pcmall.service.sale.miaomore.impl ؛ استيراد java.util.hashmap ؛ استيراد java.util.map ؛ // اختبر واجهة الفئة العامة testmain {private string url = "https://xxx.xxx.xxx/" ؛ سلسلة خاصة charset = "utf-8" ؛ httpclientutil الخاص httpclientutil = null ؛ public testmain () {httpclientutil = new httpclientutil () ؛ } اختبار void العام () {String httporgcreateTest = url + "xxx/xxx/delivery" ؛ خريطة <string ، string> createMap = new hashmap <string ، string> () ؛ CreateMap.put ("Delivery_Code" ، "1D1QZ22Z22SM21A") ؛ CreateMap.put ("Timestamp" ، "147919840000") ؛ CreateMap.put ("Sign" ، "F2109C333F3EADE929F932E89703FA0F683D43EB") ؛ String httporgcreateStRtrtn = httpclientutil.dopost (httporgcreateTest ، createMap ، charset) ؛ System.out.println ("النتيجة:"+httporgcreateStrtn) ؛ } public static void main (string [] args) {testMain main = new testMain () ؛ Main.Test () ؛ }}في البداية لم أفهم استخدام BasicNameValuepair. في وقت لاحق ، اكتشفت ببطء ووجدت أن BasicNameValuePair هو فئة تخزن أزواج القيمة الرئيسية. عند إضافة قيم مفتاح وقيمة جديدة ، سيتم استبداله تلقائيًا بتنسيق HTTP ، = و & الرموز ، مثل https://xxx.xxx.xxx/xxx/xxxx/delivery؟delivery_code=dqzzsm2a ~ لا يتعين علينا لصقها ونطابقها بأنفسنا. أنا شخصياً أعتقد أنه مناسب ودقيق للاستخدام. آمل أن يساعد الجميع!
ما سبق هو المحتوى الكامل لمثيل Java Post Request (HTTPS) الذي قدمه لك المحرر. آمل أن يدعم الجميع wulin.com ~