يوفر JDK بعض الدعم لطلبات البروتوكول عديمة الجنسية (HTTP).
أولاً ، دعنا نبني فئة طلب (httprequester).
تغلف هذه الفئة رمز Java لتنفيذ طلبات بسيطة ، على النحو التالي:
نسخة الكود كما يلي:
استيراد java.io.bufferedreader ؛
استيراد java.io.ioException ؛
استيراد java.io.inputstream ؛
استيراد java.io.inputstreamreader ؛
استيراد java.net.httpurlconnection ؛
استيراد java.net.url ؛
استيراد java.nio.charset.charset ؛
استيراد java.util.map ؛
استيراد java.util.vector ؛
/**
* كائن طلب HTTP
*
* Author Yymmiinngg
*/
الطبقة العامة httprequester {
سلسلة خاصة defaultContentEncoding ؛
httprequester العامة () {
this.defaultContentEncoding = charset.defaultcharset (). name () ؛
}
/**
* أرسل طلب الحصول على
*
* param urlstring
* عنوان URL
* كائن استجابة العودة
* throws ioException
*/
httprespons العامة sendget (سلسلة urlstring) يلقي ioexception {
إرجاع هذا.
}
/**
* أرسل طلب الحصول على
*
* param urlstring
* عنوان URL
* param params
* مجموعة المعلمة
* كائن استجابة العودة
* throws ioException
*/
sendgons httprespons العامة (سلسلة urlstring ، خريطة <سلسلة ، سلسلة> params)
يلقي ioexception {
إرجاع هذا.
}
/**
* أرسل طلب الحصول على
*
* param urlstring
* عنوان URL
* param params
* مجموعة المعلمة
* Param Properties
* طلب السمات
* كائن استجابة العودة
* throws ioException
*/
sendgons httprespons العامة (سلسلة urlstring ، خريطة <string ، string> params ،
خريطة <string ، string> خصائص) يلقي ioException {
إرجاع هذا.
}
/**
* إرسال طلب البريد
*
* param urlstring
* عنوان URL
* كائن استجابة العودة
* throws ioException
*/
httprespons العامة sendpost (سلسلة urlstring) يلقي ioException {
إرجاع هذا.
}
/**
* إرسال طلب البريد
*
* param urlstring
* عنوان URL
* param params
* مجموعة المعلمة
* كائن استجابة العودة
* throws ioException
*/
httprespons العامة sendPost (سلسلة urlstring ، خريطة <سلسلة ، سلسلة> params)
يلقي ioexception {
إرجاع this.send (urlstring ، "post" ، params ، null) ؛
}
/**
* إرسال طلب البريد
*
* param urlstring
* عنوان URL
* param params
* مجموعة المعلمة
* Param Properties
* طلب السمات
* كائن استجابة العودة
* throws ioException
*/
httprespons العامة sendpost (سلسلة urlstring ، خريطة <سلسلة ، سلسلة> params ،
خريطة <string ، string> خصائص) يلقي ioException {
إرجاع هذا.
}
/**
* أرسل طلب HTTP
*
* param urlstring
* @كائن الانعكاس
* throws ioException
*/
إرسال HTTPRespons الخاص (سلسلة urlstring ، طريقة السلسلة ،
خريطة <سلسلة ، سلسلة> معلمات ، خريطة <سلسلة ، سلسلة> خصائص)
يلقي ioexception {
httpurlConnection urlConnection = null ؛
if (method.equalsignorecase ("get") && parameters! = null) {
StringBuffer param = new StringBuffer () ؛
int i = 0 ؛
لـ (مفتاح السلسلة: parameters.keyset ()) {
إذا (i == 0)
param.append ("؟") ؛
آخر
param.append ("&") ؛
param.append (key) .Append ("="). append (parameters.get (key)) ؛
i ++ ؛
}
urlstring += param ؛
}
url url = url جديد (urlstring) ؛
urlConnection = (httpurlConnection) url.openconnection () ؛
urlconnection.setRequestMethod (method) ؛
urlconnection.setDooutput (صواب) ؛
urlconnection.setDoInput (صواب) ؛
urlconnection.setuseCaches (false) ؛
إذا (الملكية! = فارغة)
لـ (مفتاح السلسلة: properties.keyset ()) {
urlconnection.addRequestProperty (Key ، Properties.get (key)) ؛
}
if (method.equalsignorecase ("post") && parameters! = null) {
StringBuffer param = new StringBuffer () ؛
لـ (مفتاح السلسلة: parameters.keyset ()) {
param.append ("&") ؛
param.append (key) .Append ("="). append (parameters.get (key)) ؛
}
urlConnection.getOutputStream (). الكتابة (param.toString (). getBytes ()) ؛
urlConnection.getOutputStream (). flush () ؛
urlconnection.getOutputStream (). close () ؛
}
إرجاع this.makeContent (urlstring ، urlconnection) ؛
}
/**
* احصل على كائن الاستجابة
*
* param urlconnection
* كائن استجابة العودة
* throws ioException
*/
httprespons الخاصة (سلسلة urlstring ،
httpurlConnection urlConnection) يلقي ioexception {
httprespons httpresponser = new httprespons () ؛
يحاول {
inputStream in = urlConnection.getInputStream () ؛
bufferreader bufferreader = جديد bufferedReader (
new inputStreamReader (in)) ؛
httpresponser.contentCollection = ناقل جديد <string> () ؛
StringBuffer temp = new StringBuffer () ؛
خط السلسلة = bufferedReader.ReadLine () ؛
بينما (الخط! = فارغ) {
httpresponser.contentCollection.add (الخط) ؛
temp.append (line) .Append ("/r/n") ؛
line = bufferedReader.ReadLine () ؛
}
BufferedReader.Close () ؛
String ecod = urlConnection.getContentEncoding () ؛
إذا (ecod == null)
ecod = this.defaultContentEncoding ؛
httpresponser.urlString = urlstring ؛
httpresponser.defaultport = urlConnection.geturl (). getDefaultPort () ؛
httpresponser.file = urlConnection.geturl (). getFile () ؛
httpresponser.host = urlConnection.geturl (). gethost () ؛
httpresponser.path = urlConnection.geturl (). getPath () ؛
httpresponser.port = urlConnection.geturl (). getPort () ؛
httpresponser.protocol = urlConnection.geturl (). getProtocol () ؛
httpresponser.query = urlConnection.geturl (). getQuery () ؛
httpresponser.ref = urlConnection.geturl (). getRef () ؛
httpresponser.userInfo = urlConnection.geturl (). getUserInfo () ؛
httpresponser.content = سلسلة جديدة (temp.toString (). getBytes () ، ecod) ؛
httpresponser.contentencoding = ecod ؛
httpresponser.code = urlConnection.getResponsecode () ؛
httpresponser.message = urlConnection.getResPonsemessage () ؛
httpresponser.contentType = urlConnection.getContentType () ؛
httpresponser.method = urlConnection.getRequestMethod () ؛
httpresponser.connecttimeout = urlConnection.getConnectTimeout () ؛
httpresponser.readtimeout = urlConnection.getReadTimeout () ؛
إرجاع httpresponser ؛
} catch (ioException e) {
رمي ه ؛
} أخيراً {
إذا (urlConnection! = NULL)
urlconnection.disconnect () ؛
}
}
/**
* مجموعة أحرف الاستجابة الافتراضية
*/
السلسلة العامة getDefaultContentEncoding () {
إرجاع this.defaultContentEncoding ؛
}
/**
* اضبط مجموعة حرف الاستجابة الافتراضية
*/
public void setDefaultContentEncoding (سلسلة defaultContentEncoding) {
this.defaultContentEncoding = defaultContentEncoding ؛
}
}
ثانياً ، دعنا نلقي نظرة على كائن الاستجابة (httprespons). كائن الاستجابة هو في الواقع مجرد حبة بيانات ، والتي تغلف بيانات نتائج استجابة الطلب ، على النحو التالي:
نسخة الكود كما يلي:
استيراد java.util.vector ؛
/**
* كائن الاستجابة
*/
الطبقة العامة httprespons {
سلسلة urlstring
int defaultport ؛
ملف السلسلة ؛
مضيف سلسلة
مسار السلسلة
ميناء
بروتوكول السلسلة.
استعلام السلسلة
سلسلة المرجع.
سلسلة userinfo ؛
سلسلة المحتوى
محتوى السلسلة ؛
سلسلة contentType ؛
رمز int ؛
رسالة سلسلة
طريقة السلسلة ؛
int connecttimeout ؛
int readtimeout ؛
ناقل <string> contentCollection ؛
السلسلة العامة getContent () {
إرجاع المحتوى ؛
}
السلسلة العامة getContentType () {
إرجاع contentType ؛
}
int getCode () {
رمز الإرجاع ؛
}
السلسلة العامة getMessage () {
رسالة العودة ؛
}
المتجه العام <string> getContentCollection () {
إرجاع المحتوى.
}
السلسلة العامة getContentEncoding () {
إرجاع المحتوى
}
السلسلة العامة getMethod () {
طريقة العودة ؛
}
العام int getConnectTimeOut () {
Return ConnectTimeout ؛
}
الجمهور int getReadTimeout () {
إرجاع readtimeout ؛
}
السلسلة العامة geturlstring () {
إرجاع urlstring
}
العام int getDefaultPort () {
إرجاع DefaultPort ؛
}
السلسلة العامة getFile () {
ملف الإرجاع ؛
}
السلسلة العامة gethost () {
عودة المضيف
}
السلسلة العامة getPath () {
مسار العودة
}
الجمهور int getPort () {
ميناء العودة ؛
}
السلسلة العامة getProtocol () {
بروتوكول العودة ؛
}
السلسلة العامة getQuery () {
استعلام العودة.
}
السلسلة العامة getRef () {
المرجع العودة ؛
}
السلسلة العامة getUserInfo () {
إرجاع userinfo ؛
}
}
أخيرًا ، دعنا نكتب فئة تطبيق لاختبار ما إذا كان الكود أعلاه صحيحًا
نسخة الكود كما يلي:
استيراد com.yao.http.httprequester ؛
استيراد com.yao.http.httprespons ؛
اختبار الفئة العامة {
الفراغ الثابت العام الرئيسي (سلسلة [] args) {
يحاول {
طلب httprequester = جديد httprequester () ؛
httprespons hr = request.sendget ("// www.vevb.com") ؛
system.out.println (hr.geturlstring ()) ؛
System.out.println (Hr.GetProtocol ()) ؛
system.out.println (hr.gethost ()) ؛
System.out.println (hr.getport ()) ؛
system.out.println (hr.getContentEncoding ()) ؛
system.out.println (hr.getMethod ()) ؛
system.out.println (hr.getContent ()) ؛
} catch (استثناء e) {
E.PrintStackTrace () ؛
}
}
}