ไลบรารีอำนวยความสะดวกที่เรียบง่ายสำหรับการใช้ HttpURLConnection เพื่อส่งคำขอและเข้าถึงการตอบกลับ
ห้องสมุดนี้มีให้ภายใต้ใบอนุญาต MIT
ไลบรารีคำขอ http มีให้บริการจาก Maven Central
< dependency >
< groupId >com.github.kevinsawicki</ groupId >
< artifactId >http-request</ artifactId >
< version >6.0</ version >
</ dependency >
ไม่ได้ใช้ Maven? เพียงคัดลอกคลาส HttpRequest ลงในโปรเจ็กต์ของคุณ อัปเดตการประกาศแพ็คเกจ เพียงเท่านี้คุณก็พร้อมแล้ว
Javadocs มีอยู่ที่นี่
ดูรายการโครงการที่รู้จักที่ใช้ไลบรารีนี้ที่นี่
ไลบรารีนี้เขียนขึ้นเพื่อให้คำขอ HTTP ง่ายและสะดวกเมื่อใช้ HttpURLConnection
ไลบรารีเช่น Apache HttpComponents นั้นยอดเยี่ยม แต่บางครั้งสำหรับความเรียบง่ายหรือบางทีสำหรับสภาพแวดล้อมที่คุณใช้งาน (Android) คุณเพียงต้องการใช้ HttpURLConnection
ที่ล้าสมัย ไลบรารีนี้พยายามเพิ่มความสะดวกและรูปแบบทั่วไปในการส่งคำขอ HTTP เช่น อินเทอร์เฟซแบบไหลสำหรับการสร้างคำขอ และการสนับสนุนสำหรับคุณลักษณะต่างๆ เช่น คำขอแบบหลายส่วน
บรรทัดล่าง: เป้าหมายเดียวของไลบรารีนี้คือการปรับปรุงการใช้งานคลาส HttpURLConnection
ไม่มี . เป้าหมายของไลบรารีนี้คือการเป็นคลาสคลาสเดียวที่มีคลาสสแตติกภายในบางคลาส โครงการทดสอบจำเป็นต้องมี Jetty เพื่อทดสอบคำขอกับการใช้งานเซิร์ฟเวอร์ HTTP จริง
คลาส HttpRequest
จะไม่ทิ้งข้อยกเว้นที่ตรวจสอบไว้ แต่ข้อยกเว้นระดับต่ำทั้งหมดจะถูกรวมไว้ใน HttpRequestException
ซึ่งจะขยาย RuntimeException
คุณสามารถเข้าถึงข้อยกเว้นพื้นฐานได้โดยจับ HttpRequestException
แล้วเรียก getCause()
ซึ่งจะส่งคืน IOException
ดั้งเดิมเสมอ
เลขที่ . ออบเจ็กต์ HttpUrlConnection
พื้นฐานที่แต่ละออบเจ็กต์ HttpRequest
wraps มี API แบบซิงโครนัส ดังนั้นวิธีการทั้งหมดบน 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 );
}
});