واحد.
1. اكتب فئة أدوات httprequestutils ، بما في ذلك طلب النشر والحصول على الطلب
حزمة com.brainlong.framework.util.httpclient ؛ استيراد net.sf.json.jsonoBject ؛ استيراد org.apache.commons.httpclient.httpstatus ؛ استيراد org.apache.http.httpresponse ؛ import org.http.client.methods.httpget ؛ misport ؛ org.apache.http.entity.Stringentity ؛ import org.apache.http.impl.client.defaulthttpclient ؛ import org.apache.http.util.entityUtils ؛ import org.slf4j.logger ؛ import org.slf4j.loggerfactory ؛ استيراد java.io.ioException ؛ استيراد java.net.urldecoder ؛ الفئة العامة httprequestutils {private static logger logger = loggerfactory.getLogger (httprequestutils.class) ؛ // log/** * httppost * param url path * param jsonparam parameter * @regurn */public static jsonobject httppost (url string ، jsonobject jsonparam) {return htpost (url ، jsonparam ، false) ؛ } /*** طلب البريد* عنوان url url param* param jsonparam معلمات* param notherResponse لا حاجة إلى إعادة النتيجة* @RETURN defaulthttpclient () ؛ jsonobject jsonresult = null ؛ httppost method = new httppost (url) ؛ جرب {if (null! = jsonparam) {// حل المشكلة الصينية المليئة بالكيان الصارم = striterity new (jsonparam.toString () ، "utf-8") ؛ entity.setContentEncoding ("UTF-8") ؛ entity.setContentType ("application/json") ؛ method.setentity (الكيان) ؛ } httpresponse result = httpclient.execute (method) ؛ url = urldecoder.decode (url ، "utf-8") ؛ / ** تم إرسال الطلب بنجاح وتلقى استجابة **/ if (result.getStatusLine (). getStatusCode () == 200) {String str = "" ؛ حاول { / ** اقرأ بيانات سلسلة JSON التي تم إرجاعها بواسطة الخادم ** / str = entityUtils.ToString (result.getentity ()) ؛ if (nowedResponse) {return null ؛ } / ** تحويل سلسلة json إلى JSON Object ** / jSonResult = jsonobject.fromObject (str) ؛ } catch (استثناء e) {logger.error ("فشل إرسال طلب:" + url ، e) ؛ }}} catch (ioException e) {logger.error ("فشل إرسال طلب post:" + url ، e) ؛ } إرجاع jsonresult ؛ } /*** إرسال طلب الحصول على طلب* param url path* regurn* /public static jsonobject httpget (string url) {// get request returns returns jsonobject jsonresult = null ؛ حاول {defaulthttpclient client = new DefaulThTtpClient () ؛ // إرسال طلب الحصول على طلب httpget = new httpget (url) ؛ httpresponse استجابة = client.execute (request) ؛ / ** تم إرسال الطلب بنجاح وتلقى استجابة **/ if (response.getStatusline (). getStatusCode () == httpstatus.sc_ok) {/ ** اقرأ بيانات سلسلة json التي تم إرجاعها بواسطة الخادم ** / ** تحويل سلسلة JSON إلى JSON Object **/ jSonResult = jsonobject.fromObject (strresult) ؛ url = urldecoder.decode (url ، "utf-8") ؛ } else {logger.error ("فشل تقديم الطلب:" + url) ؛ }} catch (ioException e) {logger.error ( } إرجاع jsonresult ؛ }}2. اكتب رمز الأعمال لإرسال طلب HTTP
3. إعدادات ملفات تحكم ملفات تحكم تكوين MVC
<!-المسح التلقائي والمسح الضوئي فقط controller-> <السياق: مكون-المسح الضوئي package = "com.wiselong.multichannel" use-default-filters = "false"
4. استلام طلب HTTP
تلقي طلب البريد
@controller@requestmapping (value = "/api/platform/stisplycenter/associationInfo") publicClasSexceptionInfOconTroller {// enjuctionauredPrivationExceptionInfoBizexceptionInfobiz ؛/*** إنشاء طلب استثناء طلب*@paramrequestbody محتوى طلب*@p aramrequest request header*@returnjsonoBject*/@requestmapping (value = "/create" ، method = requestMethod.post) publicmodelandviewCreateExceptionInfo (@requestbodystringRequestbody ، httpservletrequestrequest) {jsonobjectjsonobject ct = jsonobject.fromObject (requestbody) ؛ comexceptionInfocomexceptionInfo = newComexceptionInfo () ؛ comexceptionInfo.setProjectName (jsonobject. GetString ("ProjectName")) ؛ comexceptioninfo.settagname (jsonobject.getString ("projectName") ؛ comexceptioninfo.settagname (jsonobject.getstr ing ("tagname")) ؛ استثناء aboBiz.Insert (comexceptioninfo) ؛ // إرجاع نتيجة الطلب jsonobjectresult = newjsonoBject () ؛ result.put ("النجاح" ، "صحيح") ؛ returnnewmodelandview ("" ، desponseTilshelpher.jsonsucess (result.toString ())) ؛}}}}}}تلقي طلب الحصول على
@controller@requestmapping (value = "/api/platform/messagecenter/messages/sms") publicclasssmscontroller {AutowiredsmsssendBizSssendBiz ؛/*** تلقي رقم الهاتف المحمول والمحتوى وإدراج سجل في جدول الرسائل القصيرة*@paramrequestbody محتوى رسالة*@paramrequest طلب header*@returnjsonoBject*/@requestMapping (value = "/send" ، method = requestMethod.get) publicmodelandviewsendsms (@requestbodystringRequestbody ، httpservletrequestrequest) {// احصل على المعلمات بعد طلب url و url url و url stringurl = request.getRequesturl ()+"؟" E ") ؛ StringContent = requestUtils.getStringValue (طلب ،" المحتوى ") ؛ smssendbiz.inserttmsququ (الهاتف ، المحتوى)اثنين.
يحصل
importjava.io.bufferedReader ؛ importjava.io.ioException ؛ importjava.io.inputStream ؛ importjava.io.inputStreamReader ؛ mirtorg.apache.commons.httpclient.httpclient ؛ استيراد org.apache.commons.httpclient.httpmethod ؛ merftorg.apache.commons.httpclient.methods.getMethod ؛ publicclassh_client_get {publicstaticvoidmain (args) throwsioExcep نشوئها {// كائن فئة جديد httpclientclient = newhttpclient () ؛ // استخدم طريقة GET للتفاعل مع خادم url // httpmethodmethod = newGetMethod ( d = 1234567 & re_password = 1234567 & username = admin & lamname = admin ") ؛ httpmethodmethod = newGetMethod (" http://192.168.11 .rexecutemethod (method) ؛ // Data Dream Output. bufferedReaderBr = newBufferedReader (NewInputStreamReader (inputStream ، "UTF-8")) ؛ . زيادة وتعديل لتعيين بيانات STR إلى stringBufferStringBuffer.Append (str) ؛} // الإخراج stringBuffersystem.out.println (stringbuffer.toString ())بريد
importjava.io.bufferedReader ؛ importjava.io.ioException ؛ importjava.io.inputStream ؛ importjava.io.inputStreamReader ؛ mirtorg.apache.commons.httpclient.methods.postmethod ؛ missactorg.apache.commons.htttpclient blicstaticvoidmain (string [] args) trowsioException {httpclientclient = newhttpclient () ؛ postmethodmethod = newPostMethod ("http://192.168.11.128/bak/login_post.php") key = valuenamevaluepair [] date = {newNameValuePair ("username" ، "admin") ، newNameValUepair ("password" ، "123457") inputStreamInputStream = method.getResponseBodyassTream () ؛ Bufferreaderbrbr = newBufferedRead ER (NewInputStreamReader (inputStream ، "UTF-8")) ؛ StringBufferStringBuffer = NewsTringBuffer () ؛ stringstr = "" ؛ method.ReleAseconnection () ؛}}ثلاثة.
لا أحتاج أن أقول المزيد عن أهمية بروتوكول HTTP. بالمقارنة مع urlconnection التي تأتي مع JDK التقليدية ، فإن HTTPClient يزيد من سهولة الاستخدام والمرونة (سيتم مناقشة الاختلاف المحدد لاحقًا). لا يسهل على العميل إرسال طلبات HTTP فحسب ، بل يسهل أيضًا واجهة اختبار المطور (استنادًا إلى بروتوكول HTTP) ، مما يحسن كفاءة التطوير ويسهل أيضًا متانة الكود. لذلك ، من المهم للغاية وإلزامي إتقان httpclient. بعد إتقان httpclient ، أعتقد أن فهمي لبروتوكول HTTP سيكون أكثر تعمقا.
1. مقدمة
HTTPCLIENT هو مشروع فرعي تحت Apache Jakarta Common لتوفير مجموعات أدوات فعالة وأحدث وأحدث للميزات التي تدعم بروتوكول HTTP ، ويدعم أحدث الإصدارات واقتراحات بروتوكول HTTP. تم استخدام HTTPCLIENT في العديد من المشاريع ، مثل مشروعين آخرين مفتوح المصدر على Apache Jakarta و Cactus و HTMLUnit ، وكلاهما يستخدم HTTPCLIENT.
2. الخصائص
1. لغة جافا النقية المعيارية. تم تنفيذ http1.0 و http1.1
2. يتم تنفيذ جميع أساليب HTTP (الحصول على ، post ، وضع ، حذف ، رأس ، خيارات ، وتتبع) في بنية موجهة نحو الكائنات.
3. دعم بروتوكول HTTPS.
4. إنشاء اتصال شفاف من خلال وكيل HTTP.
5. استخدم طريقة الاتصال لإنشاء اتصال HTTPS بالنفق من خلال وكيل HTTP.
6. Basic ، Digest ، NTLMV1 ، NTLMV2 ، NTLM2 Session ، SNPNEGO/Kerberos Certification Scheme.
7. حل مصادقة مخصص.
8. مصنع المقبس المحمول والموثوق يجعل من السهل استخدام حلول الطرف الثالث.
9. يدعم مدير الاتصال التطبيقات متعددة الخيوط. وهو يدعم تعيين الحد الأقصى لعدد الاتصالات ، ويدعم أيضًا تحديد الحد الأقصى لعدد الاتصالات لكل مضيف ، واكتشاف وإغلاق الاتصالات منتهية الصلاحية.
10. التعامل تلقائيًا من ملفات تعريف الارتباط في الكتب الضوئية.
11. البرنامج المساعد سياسة ملفات تعريف الارتباط المخصصة.
12. يمكن أن يمنع دفق الإخراج للطلب محتويات الدفق من التخزين المؤقت مباشرة إلى خادم المقبس.
13. يمكن لدفق الإدخال للاستجابة قراءة المحتوى المقابل بشكل فعال مباشرة من خادم المقبس.
14. احتفظ بالاتصالات المستمرة مع keepalive في http1.0 و http1.1.
15. الحصول مباشرة على رمز الاستجابة والرؤوس المرسلة من الخادم.
16. اضبط القدرة على وقت الخروج من الاتصال.
17. الدعم التجريبي للتخزين المؤقت للاستجابة HTTP1.1.
18. رمز المصدر متاح مجانًا بناءً على ترخيص Apache.
3. كيفية الاستخدام
من السهل جدًا استخدام httpclient لإرسال الطلبات واستلام الردود ، ويتطلب عمومًا الخطوات التالية.
1. إنشاء كائن httpclient.
2. قم بإنشاء مثيل لطريقة الطلب وحدد عنوان URL للطلب. إذا كنت بحاجة إلى إرسال طلب الحصول على الحصول على كائن httpget ؛ إذا كنت بحاجة إلى إرسال طلب نشر ، قم بإنشاء كائن HTTPPOST.
3. إذا كنت بحاجة إلى إرسال معلمات الطلب ، فيمكنك الاتصال بطريقة SetParams (hetpparams params) الشائعة في httpget و httppost لإضافة معلمات الطلب ؛ بالنسبة لكائنات HTTPPOST ، يمكنك أيضًا استدعاء طريقة Setentity (HTTPENTITY ENTITY) لتعيين معلمات الطلب.
4. اتصل بالتنفيذ (طلب httpurirequest) لكائن httpclient لإرسال طلب ، وهذه الطريقة تُرجع httpresponse.
5. استدعاء httpresponse's getAllheaders () ، getheaders (اسم السلسلة) والأساليب الأخرى يمكن أن تحصل على رأس استجابة الخادم ؛ يمكن أن تحصل استدعاء طريقة getentity () على httpresponse على كائن httpentity ، الذي يلف محتوى استجابة الخادم. يمكن للبرنامج الحصول على محتوى استجابة الخادم من خلال هذا الكائن.
6. إطلاق الاتصال. يجب إصدار الاتصال بغض النظر عما إذا كانت طريقة التنفيذ ناجحة أم لا.
رابعا. أمثلة
حزمة com.test ؛ استيراد java.io.file ؛ استيراد java.io.fileInputStream ؛ استيراد java.io.ioException ؛ استيراد java.io.unsupportedencodingException ؛ استيراد java.security.KeyManagementException ؛ استيراد java.security.keystore ؛ استيراد java.security.keystoreException ؛ استيراد java.security.nosuchalgorithmexception ؛ استيراد java.security.cert.certificateException ؛ استيراد java.util.arraylist ؛ استيراد java.util.list ؛ استيراد javax.net.ssl.sslcontext ؛ استيراد org.apache.http.httpentity ؛ استيراد org.apache.http.namevaluepair ؛ استيراد org.apache.http.parseException ؛ استيراد org.apache.http.client.clientprotocolexception ؛ استيراد org.apache.http.client.entity.urlencodedformentity ؛ استيراد org.apache.http.client.methods.closablehttpresponse ؛ استيراد org.apache.http.client.methods.httpget ؛ استيراد org.apache.http.client.methods.httppost ؛ استيراد org.apache.http.conn.ssl.sslconnectionsocketFactory ؛ استيراد org.apache.http.conn.ssl.sslcontexts ؛ استيراد org.apache.http.conn.ssl.TrustselfSignedStrategy ؛ استيراد org.apache.http.entity.contentType ؛ استيراد org.apache.http.entity.mime.multipartentitybuilder ؛ استيراد org.apache.http.entity.mime.content.filebody ؛ استيراد org.apache.http.entity.mime.content.stringbody ؛ استيراد org.apache.http.impl.client.closablehttpclient ؛ استيراد org.apache.http.impl.client.httpclients ؛ استيراد org.apache.http.impl.client.httpclients ؛ استيراد org.apache.http.message.basicnamevaluepair ؛ استيراد org.apache.http.util.entityUtils ؛ استيراد org.junit.test ؛ الفئة العامة httpClientTest {test public void Junittest () {get () ؛ } / ** * httpclient connects ssl * / public void ssl () {closleablehttpclient httpclient = null ؛ حاول {keystore ruststore = keystore.getInstance (keystore.getDefaultType ()) ؛ FileInputStream instream = new FileInputStream (ملف جديد ("d: //tomcat.keystore")) ؛ حاول {54. // load keystore d: //tomcat.keystore ruststore.load (instream ، "123456" .Thararray ()) ؛ } catch (certificateException e) {E.PrintStackTrace () ؛ } أخيرًا {try {entersream.close () ؛ } catch (استثناء تجاهل) {}} // الثقة في المرجع المصدق الخاص بك وجميع الشهادات الموقعة ذاتيا sslContext sslContext = sslcontexts.custom (). loadtrustmaterial (trustStore ، rustselfsignedstrategy ()). // فقط استخدام بروتوكول TLSV1 SSLConnectionsocketFactory SSLSF = جديد sslConnectionsOctionFactory (SSLContext ، سلسلة جديدة [] {"tlsv1"} ، null ، sslconnectionsocketfactory.browser_compatible_hostname_verifier) ؛ httpclient = httpclients.custom (). setsslsocketfactory (sslsf) .build () ؛ // إنشاء طلب http (الحصول على الطريقة) httpget httpget = new httpget ("https: // localhost: 8443/mydemo/ajax/serivcej.action") ؛ system.out.println ("request تنفيذ" + httpget.getRequestLine ()) ؛ closablehttpresponse استجابة = httppclient.execute (httpget) ؛ حاول {httpentity unitity = response.getentity () ؛ System.out.println ("----------------------------------------------") ؛ System.out.println (response.getStatusLine ()) ؛ if (ectity! = null) {system.out.println ("طول محتوى الاستجابة:" + entity.getContentLength ()) ؛ system.out.println (entityUtils.ToString (unitity)) ؛ entityutils.consume (الكيان) ؛ }} أخيرًا {desponse.close () ؛ }} catch (parseException e) {E.PrintStackTrace () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } catch (keyManagementException e) {e.printStackTrace () ؛ } catch (nosuchalgorithMexception e) {e.printstacktrace () ؛ } catch (keystoreException e) {e.printStackTrace () ؛ } أخيرًا {if (httpclient! = null) {try {httpclient.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}}}} / ** * أرسل النموذج في post (محاكاة طلب تسجيل الدخول إلى المستخدم) * / public void postform () {// إنشاء مثيل httpclient الافتراضي. closablehttpclient httpclient = httpclients.createdefault () ؛ // إنشاء httppost httppost httppost = new httppost ("http: // localhost: 8080/mydemo/ajax/serivcej.action") ؛ // إنشاء قائمة قائمة انتظار المعلمة <MameValUepair> forparams = new ArrayList <NameValUepair> () ؛ formparams.add (New BasicNameValuePair ("اسم المستخدم" ، "المشرف")) ؛ formparams.add (New BasicNameValuePair ("كلمة المرور" ، "123456")) ؛ urlencodedformentity uefentity ؛ جرب {uefentity = urlencodedformentity الجديد (formparams ، "utf-8") ؛ httppost.setentity (uefentity) ؛ System.out.println ("request request" + httppost.geturi ()) ؛ closablehttpresponse استجابة = httpclient.execute (httppost) ؛ حاول {httpentity unitity = response.getentity () ؛ if (Entity! = null) {system.out.println ("----------------------------------------") ؛ System.out.println ("محتوى الاستجابة:" + entityUtils.ToString (الكيان ، "UTF-8")) ؛ System.out.println ("----------------------------------------") ؛ }} أخيرًا {desponse.close () ؛ }} catch (clientprotocolexception e) {e.printStackTrace () ؛ } catch (UnsupportedEncodingException E1) {e1.printstacktrace () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {// أغلق الاتصال وأصدر المورد Try {httpclient.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}} / *** أرسل طلبًا منشورًا للوصول إلى التطبيق المحلي وإرجاع نتائج مختلفة وفقًا لمعلمات مختلفة* / public void post () {// إنشاء مثيل httpclient الافتراضي. closablehttpclient httppclient = httpclients.createdefault () ؛ // إنشاء httppost httppost httppost = new httppost ("http: // localhost: 8080/mydemo/ajax/serivcej.action") ؛ // إنشاء قائمة قائمة انتظار المعلمة <MameValUepair> forparams = new ArrayList <NameValUepair> () ؛ forparams.add (New BasicNameValuePair ("type" ، "House")) ؛ urlencodedformentity uefentity ؛ جرب {uefentity = urlencodedformentity (forparams ، "utf-8") ؛ httppost.setentity (uefentity) ؛ System.out.println ("request request" + httppost.geturi ()) ؛ closablehttpresponse استجابة = httpclient.execute (httppost) ؛ حاول {httpentity unitity = response.getentity () ؛ if (Entity! = null) {system.out.println ("----------------------------------------") ؛ System.out.println ("محتوى الاستجابة:" + entityUtils.ToString (الكيان ، "UTF-8")) ؛ System.out.println ("----------------------------------------") ؛ }} أخيرًا {desponse.close () ؛ }} catch (clientprotocolexception e) {e.printStackTrace () ؛ } catch (UnsupportedEncodingException E1) {e1.printstacktrace () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {// أغلق الاتصال وأصدر المورد Try {httpclient.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}} / *** أرسل طلب الحصول على طلب* / public void get () {closleablehttpclient httpclient = httpclients.createdefault () ؛ حاول {// إنشاء httpget. httpget httpget = new httpget ("http://www.baidu.com/") ؛ System.out.println ("request request" + httpget.geturi ()) ؛ // تنفيذ طلب الحصول على. closablehttpresponse استجابة = httpclient.execute (httpget) ؛ حاول {// الحصول على كيان الاستجابة httpentity كيان = استجابة. getentity () ؛ System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Print response طول المحتوى. System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ } catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {// أغلق الاتصال وأصدر المورد Try {httpclient.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}} / *** قم بتحميل الملف* / public void upload () {closleablehttpclient httpclient = httpclients.createdefault () ؛ حاول {httppost httppost = new httppost ("http: // localhost: 8080/mydemo/ajax/serivcefile.action") ؛ filebody bin = new FileBody (ملف جديد ("f: //image//sendpix0.jpg")) ؛ stringbody comment = new StringBody ("ملف ثنائي من نوع ما" ، contentType.text_plain) ؛ httpentity reqentity = multipartentitybuilder.create (). addpart ("bin" ، bin) .addpart ("comment" ، comment) .build () ؛ httppost.setentity (reqentity) ؛ system.out.println ("request request" + httppost.getRequestLine ()) ؛ closablehttpresponse استجابة = httpclient.execute (httppost) ؛ Try {System.out.println ("--------------------------------------------") ؛ System.out.println (response.getStatusLine ()) ؛ httpentity resentity = response.getentity () ؛ if (resentity! = null) {system.out.println ("طول محتوى الاستجابة:" + resentity.getContentLength ()) ؛ } entityUtils.consume (استياء) ؛ } أخيرًا {desponse.close () ؛ }} catch (clientprotocolexception e) {e.printStackTrace () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {try {httpclient.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}}}}} *المثال البسيط أعلاه لعملية إرسال طلبات httpclient ونتائج طلب الاستلام في Java هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.