/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 4 ĠSquare , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġokhttp 3 Ċ Ċ import Ġjava . io . IOException Ċ import Ġok io . Timeout Ċ Ċ /** Ċ Ġ* ĠCall æĺ¯ å¯¹ ä¸Ģæ¬¡ è¯·æ±Ĥ - åĵįåºĶ çļĦ å®Įæķ´ è¿ĩç¨ĭ çļĦ æĬ½ è±¡ Ċ Ġ* ĠCall æİ¥åı£ å°ģè£ħ äºĨä¸Ģ å¯¹ request / response ï¼Ī åľ¨ HTTP / 2 ä¸Ń æĺ¯ 1 ä¸ª æµģ ï¼īï¼Į æ¯ıä¸ª call åıªèĥ½ è¢« è°ĥçĶ¨ ä¸Ģæ¬¡ Ċ Ġ*/ Ċ interface ĠCall Ġ: ĠClone able Ġ{ ĊĠĠĠ Ġ/** Ġå½ĵåīį Call å°ģè£ħ çļĦ Request . Ġ*/ ĊĠĠĠ Ġfun Ġrequest (): ĠRequest ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ åĲĮæŃ¥ è°ĥçĶ¨ ï¼Į ä¼ļ éĺ» å¡ŀ å½ĵåīį çº¿ç¨ĭ çĽ´ åĪ° æľī æķ°æį® åĵįåºĶ æĪĸèĢħ æĺ¯ error è¿ĶåĽŀ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ ä¸ºäºĨ éģ¿åħį èµĦæºĲ æ³ Ħ éľ ² ï¼Į è°ĥçĶ¨ æĸ¹ åºĶè¯¥ ä¸» åĬ¨ åħ³éĹŃ [ Response ] ï¼Į è¿Ļ åĲĮæĹ¶ ä¼ļ åħ³éĹŃ åºķ å±Ĥ çļĦ [ ResponseBody ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ// Ġ ç¡® ä¿Ŀ response è¢« åħ³éĹŃ ĊĠĠĠĠ Ġ* Ġtry Ġ( Response Ġresponse Ġ= Ġclient . new Call ( request ). execute ()) Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġ... ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġcaller Ġmay Ġread Ġthe Ġresponse Ġbody Ġwith Ġthe Ġresponse 's Ġ[ Response . body ] Ġmethod . ĠTo Ġavoid ĊĠĠĠĠ Ġ* Ġle aking Ġresources Ġcall ers Ġmust Ġ[ close Ġthe Ġresponse Ġbody ][ ResponseBody ] Ġor Ġthe Ġresponse . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ æ³¨æĦı ï¼ļ ä¼łè¾ĵ å±Ĥ æĪĲåĬŁ ï¼Ī æİ¥åıĹ åĪ° HTTP åĵįåºĶ çłģ ï¼Į headers åĴĮ body ï¼ī ä¸į ä»£è¡¨ åºĶçĶ¨ å±Ĥ æĪĲåĬŁ ï¼Į åĽłä¸º åı¯èĥ½ è¿ĶåĽŀ çļĦæĺ¯ 4 0 4 æĪĸèĢħ 5 0 0 è¿Ļæł· çļĦ ï¼Į å®ŀéĻħ ä¸Ĭ å¯¹ åºĶçĶ¨ å±Ĥ æĿ¥è¯´ æĺ¯ è¯·æ±Ĥ å¤±è´¥ çļĦ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIOException Ġå¦Ĥæŀľ è¯·æ±Ĥ åĽłä¸º è¢« åıĸæ¶Ī ãĢģ è¿ŀæİ¥ éĹ®é¢ĺ ãĢģ è¶ħæĹ¶ çŃī åİŁåĽł ä¸įèĥ½ è¢« æĪĲåĬŁ æī§è¡Į ï¼Į å°±ä¼ļ æĬĽ åĩº è¿Ļä¸ª å¼Ĥå¸¸ ãĢĤ è¿Ļ è¡¨ç¤º çļĦæĺ¯ æľįåĬ¡ ç«¯ åı¯èĥ½ å·²ç»ı æİ¥åıĹ åĪ°äºĨ è¯·æ±Ĥ ï¼Į ä½Ĩæĺ¯ è¿Ļ æ¬¡ è¯·æ±Ĥ å®¢æĪ·ç«¯ åĪ¤ å®ļ ä¸º å¤±è´¥ äºĨ ãĢĤ ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalStateException Ġ éĩįå¤į æī§è¡Į ä¸Ģä¸ª å·²ç»ı è¢« æī§è¡Į è¿ĩ çļĦ Call æĹ¶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġexecute (): ĠResponse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġåľ¨ æľª æĿ¥çļĦ æŁĲä¸ª æĹ¶éĹ´ çĤ¹ æī§è¡Į è¯·æ±Ĥ ãĢĤ å¼ĤæŃ¥ æī§è¡Į ï¼Į ä¸įä¼ļ éĺ» å¡ŀ å½ĵåīį çº¿ç¨ĭ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠãĢĲ dispatcher ][ Ok HttpClient . dispatcher ] åĨ³å®ļ äºĨ è¯·æ±Ĥ ä»Ģä¹Ī æĹ¶åĢĻ è¢« æī§è¡Į ãĢĤ ä¸ĢèĪ¬ æĿ¥è¯´ ï¼Į éĻ¤äºĨ dispatcher å¤Ħ äºİ çī¹ åĪ« å¿ Ļ ç¢ Į çļĦ çĬ¶æĢģ ä¸ĭ ï¼Į éĥ½æĺ¯ ç«ĭ åį³ æī§è¡Į ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġæī§è¡Į å®ĮæĪĲ æĪĸèĢħ å¤±è´¥ ä¹ĭåĲİ ä¼ļ åĽŀè°ĥ response Callback . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalStateException Ġwhen Ġthe Ġcall Ġhas Ġalready Ġbeen Ġexecuted . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġenqueue ( response Callback : ĠCallback ) ĊĊĠĠĠ Ġ/** Ġ åıĸæ¶Ī å½ĵåīį è¯·æ±Ĥ ãĢĤ å·²ç»ı æī§è¡Į å®Į æ¯ķ çļĦ è¯·æ±Ĥ ä¸įèĥ½ åıĸæ¶Ī Ġ*/ ĊĠĠĠ Ġfun Ġcancel () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġåıª æĺ¯ åĪ¤æĸŃ æĺ¯åĲ¦ è°ĥçĶ¨ äºĨ [ execute ] æĪĸèĢħ æĺ¯ [ enqueue ] ï¼Į ä¸į ä»£è¡¨ call å½ » åºķ å®ĮæĪĲ äºĨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Executed (): ĠBoolean ĊĊĠĠĠ Ġfun Ġis Canceled (): ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¿ĻéĩĮ çļĦ è¶ħæĹ¶ æĺ¯ éĴĪå¯¹ çļĦ æķ´ä¸ª è¿ĩç¨ĭ ï¼ļ ĊĠĠĠĠ Ġ* ĠĠ 1 . DNS è§£æŀĲ ĊĠĠĠĠ Ġ* ĠĠ 2 . å»ºç«ĭ è¿ŀæİ¥ ĊĠĠĠĠ Ġ* ĠĠ 3 . åĨĻåħ¥ è¯·æ±Ĥ ä½ĵ ĊĠĠĠĠ Ġ* ĠĠ 4 . æľįåĬ¡åĻ¨ å¤ĦçĲĨ ĊĠĠĠĠ Ġ* ĠĠ 5 . è¯»åıĸ åĵįåºĶ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġå¦Ĥæŀľ æľī éĩį å®ļ åĲĳ åĴĮ éĩį è¯ķ çļĦè¯Ŀ ï¼Į æĹ¶éĹ´ ä¹Ł åĮħåĲ« åľ¨ è¿Ļä¸ª timeout ä¹ĭ åĨħ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ çĽ¸ åĮ¹éħį çļĦæĺ¯ è¿Ļä¸ª åıĤæķ° ï¼ļ[ Ok HttpClient . Builder . call Timeout ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtimeout (): ĠTimeout ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĩįæĸ° åĪĽå»ºä¸Ģä¸ª è¯·æ±Ĥ ï¼Į æĢ§èĥ½ å½ĵçĦ¶ æ¯Ķ new ä¸Ģä¸ª è¦ģ å¥½ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoverride Ġfun Ġclone (): ĠCall ĊĊĠĠĠ Ġinterface ĠFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Call ( request : ĠRequest ): ĠCall ĊĠĠĠ Ġ} Ċ } Ċ