مكتبة ملائمة بسيطة لاستخدام HttpURLConnection لتقديم الطلبات والوصول إلى الاستجابة.
هذه المكتبة متاحة بموجب ترخيص MIT.
مكتبة طلبات http متاحة من Maven Central.
< dependency >
< groupId >com.github.kevinsawicki</ groupId >
< artifactId >http-request</ artifactId >
< version >6.0</ version >
</ dependency >
لا تستخدم مافن؟ ما عليك سوى نسخ فئة HttpRequest إلى مشروعك، وتحديث إعلان الحزمة، وستكون جاهزًا للبدء.
جافادوكس متاحة هنا.
انظر هنا للحصول على قائمة بالمشاريع المعروفة التي تستخدم هذه المكتبة.
تمت كتابة هذه المكتبة لجعل طلبات HTTP بسيطة وسهلة عند استخدام HttpURLConnection
.
تعد المكتبات مثل Apache HttpComponents رائعة، ولكن في بعض الأحيان، إما للبساطة، أو ربما للبيئة التي تقوم بالنشر فيها (Android)، فأنت تريد فقط استخدام HttpURLConnection
جيد الطراز القديم. تسعى هذه المكتبة إلى إضافة الراحة والأنماط الشائعة إلى عملية تقديم طلبات HTTP مثل الواجهة المرنة لبناء الطلبات ودعم الميزات مثل الطلبات متعددة الأجزاء.
خلاصة القول: الهدف الوحيد لهذه المكتبة هو تحسين سهولة استخدام فئة HttpURLConnection
.
لا أحد . الهدف من هذه المكتبة هو أن تكون فئة واحدة مع بعض الفئات الثابتة الداخلية. يتطلب مشروع الاختبار Jetty من أجل اختبار الطلبات مقابل تطبيق خادم HTTP الفعلي.
لا تقوم فئة HttpRequest
بطرح أي استثناءات محددة، وبدلاً من ذلك يتم تغليف كافة الاستثناءات ذات المستوى المنخفض في HttpRequestException
الذي يمتد RuntimeException
. يمكنك الوصول إلى الاستثناء الأساسي عن طريق التقاط HttpRequestException
واستدعاء getCause()
الذي سيعيد دائمًا IOException
الأصلي.
لا . يحتوي كائن HttpUrlConnection
الأساسي الذي يلتف عليه كل كائن HttpRequest
على واجهة برمجة تطبيقات متزامنة، وبالتالي تكون جميع الأساليب الموجودة على HttpRequest
متزامنة أيضًا.
لذلك، من المهم عدم استخدام كائن HttpRequest
في السلسلة الرئيسية لتطبيقك.
إليك مثال Android بسيط لاستخدامه من AsyncTask:
private class DownloadTask extends AsyncTask < String , Long , File > {
protected File doInBackground ( String ... urls ) {
try {
HttpRequest request = HttpRequest . get ( urls [ 0 ]);
File file = null ;
if ( request . ok ()) {
file = File . createTempFile ( "download" , ".tmp" );
request . receive ( file );
publishProgress ( file . length ());
}
return file ;
} catch ( HttpRequestException exception ) {
return null ;
}
}
protected void onProgressUpdate ( Long ... progress ) {
Log . d ( "MyApp" , "Downloaded bytes: " + progress [ 0 ]);
}
protected void onPostExecute ( File file ) {
if ( file != null )
Log . d ( "MyApp" , "Downloaded file to: " + file . getAbsolutePath ());
else
Log . d ( "MyApp" , "Download failed" );
}
}
new DownloadTask (). execute ( "http://google.com" );
int response = HttpRequest . get ( "http://google.com" ). code ();
String response = HttpRequest . get ( "http://google.com" ). body ();
System . out . println ( "Response was: " + response );
HttpRequest . get ( "http://google.com" ). receive ( System . out );
HttpRequest request = HttpRequest . get ( "http://google.com" , true , 'q' , "baseball gloves" , "size" , 100 );
System . out . println ( request . toString ()); // GET http://google.com?q=baseball%20gloves&size=100
int [] ids = new int [] { 22 , 23 };
HttpRequest request = HttpRequest . get ( "http://google.com" , true , "id" , ids );
System . out . println ( request . toString ()); // GET http://google.com?id[]=22&id[]=23
String contentType = HttpRequest . get ( "http://google.com" )
. accept ( "application/json" ) //Sets request header
. contentType (); //Gets response header
System . out . println ( "Response content type was " + contentType );
int response = HttpRequest . post ( "http://google.com" ). send ( "name=kevin" ). code ();
int response = HttpRequest . get ( "http://google.com" ). basic ( "username" , "p4ssw0rd" ). code ();
HttpRequest request = HttpRequest . post ( "http://google.com" );
request . part ( "status[body]" , "Making a multipart request" );
request . part ( "status[image]" , new File ( "/home/kevin/Pictures/ide.png" ));
if ( request . ok ())
System . out . println ( "Status was updated" );
Map < String , String > data = new HashMap < String , String >();
data . put ( "user" , "A User" );
data . put ( "state" , "CA" );
if ( HttpRequest . post ( "http://google.com" ). form ( data ). created ())
System . out . println ( "User was created" );
File output = new File ( "/output/request.out" );
HttpRequest . get ( "http://google.com" ). receive ( output );
File input = new File ( "/input/data.txt" );
int response = HttpRequest . post ( "http://google.com" ). send ( input ). code ();
File latest = new File ( "/data/cache.json" );
HttpRequest request = HttpRequest . get ( "http://google.com" );
//Copy response to file
request . receive ( latest );
//Store eTag of response
String eTag = request . eTag ();
//Later on check if changes exist
boolean unchanged = HttpRequest . get ( "http://google.com" )
. ifNoneMatch ( eTag )
. notModified ();
HttpRequest request = HttpRequest . get ( "http://google.com" );
//Tell server to gzip response and automatically uncompress
request . acceptGzipEncoding (). uncompress ( true );
String uncompressed = request . body ();
System . out . println ( "Uncompressed response is: " + uncompressed );
HttpRequest request = HttpRequest . get ( "https://google.com" );
//Accept all certificates
request . trustAllCerts ();
//Accept all hostnames
request . trustAllHosts ();
HttpRequest request = HttpRequest . get ( "https://google.com" );
//Configure proxy
request . useProxy ( "localhost" , 8080 );
//Optional proxy basic authentication
request . proxyBasic ( "username" , "p4ssw0rd" );
int code = HttpRequest . get ( "http://google.com" ). followRedirects ( true ). code ();
هل تتطلع إلى استخدام هذه المكتبة مع OkHttp؟ اقرأ هنا.
HttpRequest . setConnectionFactory ( new ConnectionFactory () {
public HttpURLConnection create ( URL url ) throws IOException {
if (! "https" . equals ( url . getProtocol ()))
throw new IOException ( "Only secure requests are allowed" );
return ( HttpURLConnection ) url . openConnection ();
}
public HttpURLConnection create ( URL url , Proxy proxy ) throws IOException {
if (! "https" . equals ( url . getProtocol ()))
throw new IOException ( "Only secure requests are allowed" );
return ( HttpURLConnection ) url . openConnection ( proxy );
}
});