摘要:相對于等類庫來說,它具有簡單易用且友好的,且不依賴于。它支持和等方法,基本能滿足任何形式的請求。不依賴于任何標準庫外的擴展,唯一的要求就是需要的版本。原始的響應數據。標識請求是否成功。
Requests是一個PHP的HTTP類庫。相對于cURL等類庫來說,它具有簡單易用且友好的API,且不依賴于cURL。它支持HEAD、 GET、 POST、 PUT、 DELETE和PATCH等方法,基本能滿足任何形式的HTTP請求。
Requests不依賴于任何PHP標準庫外的擴展,唯一的要求就是需要PHP5.2+的版本。但是如果PHP的cURL可用,Requests會優先使用它,否則會使用socket。
安裝和使用 通過Composer安裝{ "require": { "rmccue/requests": ">=1.0" }, "autoload": { "psr-0": {"Requests": "library/"} } }自動加載
可以使用Composer的加載器:
phpinclude("/path/to/composer/vendor/autoload.php");
也可以使用Requests自帶的:
phpinclude("/path/to/library/Requests.php"); Requests::register_autoloader();各種請求 GET請求
php$response = Requests::get("http://httpbin.org/get");POST請求
php$response = Requests::post("http://httpbin.org/post");
需要傳數據的話,可以使用第三個參數:
php$data = array("key1" => "value1", "key2" => "value2"); $response = Requests::post("http://httpbin.org/post", array(), $data);
如果需要傳原始數據的話,第三個參數請傳字符串。
其他請求其他請求方法都大同小異:
php$response = Requests::put("http://httpbin.org/put"); $response = Requests::delete("http://httpbin.org/delete"); $response = Requests::patch("http://httpbin.org/patch", array("If-Match" => "e0023aa4e")); $response = Requests::head("http://httpbin.org/headers");
需要注意的是equests::patch()方法的第二個參數為必傳。
Requests::request()方法看API文檔,你會發現這些方法接受的參數幾乎一樣:$url,$headers,$data(只有POST、PUT和PATCH有),$options。事實上它們只是對Requests::request()方法進行了一次封裝:
php/** * Send a GET request */ public static function get($url, $headers = array(), $options = array()) { return self::request($url, $headers, null, self::GET, $options); } /** * Send a HEAD request */ public static function head($url, $headers = array(), $options = array()) { return self::request($url, $headers, null, self::HEAD, $options); } /** * Send a DELETE request */ public static function delete($url, $headers = array(), $options = array()) { return self::request($url, $headers, null, self::DELETE, $options); } /** * Send a POST request */ public static function post($url, $headers = array(), $data = array(), $options = array()) { return self::request($url, $headers, $data, self::POST, $options); } /** * Send a PUT request */ public static function put($url, $headers = array(), $data = array(), $options = array()) { return self::request($url, $headers, $data, self::PUT, $options); }
$header允許我們自定義請求頭,例如POST方法的話,我們通常需要指定Content-Type,使服務器知道我們正在發送的的數據是什么格式:
php$url = "https://api.github.com/some/endpoint"; $headers = array("Content-Type" => "application/json"); $data = array("some" => "data"); $response = Requests::post($url, $headers, json_encode($data));
$options允許我們對請求進行配置,例如超時時間:
php$options = array( "timeout" => 5 ); $response = Requests::get("https://httpbin.org/", array(), $options);
更多的選項配置請看:http://requests.ryanmccue.info/api/source-class-Requests.html#_request
Requests里所有的請求方法(HEAD、 GET、 POST、 PUT、 DELETE和PATCH)返回的都是一個Requests_Response對象,這個對象包含了響應的各種信息:
$body:響應體。
$raw:原始的HTTP響應數據。
$headers:響應頭。
$status_code:狀態碼。
$success:標識請求是否成功。
$redirects:請求的重定向次數。
$url:請求的URL。
$history:請求的歷史記錄。
$cookies:cookie信息。
Session處理更多Requests_Response的信息請看:http://requests.ryanmccue.info/api/source-class-Requests.html#_request
當你需要對同一網站發出多個請求,那么Requests_Session對象可以幫到輕易的設置一些默認參數:
php$url = "https://api.github.com/"; $header = array("X-ContactAuthor" => "rmccue"); $data = array(); $options = array("useragent" => "My-Awesome-App"); $session = new Requests_Session($url, $header, $data, $options); $response = $session->get("/zen");
Requests_Session的構造函數接受url、headers、data和options這4個參數,順序跟Requests::request()方法一致。同時你也可以通過訪問屬性的方式去修改options參數:
php// 設置option屬性 $session->useragent = "My-Awesome-App"; // 跟上面的作用一致 $session->options["useragent"] = "My-Awesome-App";
更多Requests_Session的信息請看:http://requests.ryanmccue.info/api/source-class-Requests_Session.html
HTTPS請求Requests會默認幫忙處理HTTPS請求,就跟在瀏覽器訪問HTTPS網站一樣:
php$response = Requests::get("https://httpbin.org/");
但是如果你想使用其他的證書或者自簽證書,你可以指定證書文件(PEM格式):
php$options = array( "verify" => "/path/to/cacert.pem" ); $response = Requests::get("https://httpbin.org/", array(), $options);
如果你想禁用HTTPS的驗證,可以通過設置options:"verify" => false。
HTTP基本驗證HTTP基本驗證功能可以通過options的auth實現:
php$options = array( "auth" => array("user", "password") ); Requests::get("http://httpbin.org/basic-auth/user/password", array(), $options);進階使用 使用代理
代理可以通過options的proxy實現:
php$options = array( "proxy" => "127.0.0.1:3128" ); Requests::get("http://httpbin.org/ip", array(), $options);
如果代理需要驗證:
php$options = array( "proxy" => array( "127.0.0.1:3128", "my_username", "my_password" ) ); Requests::get("http://httpbin.org/ip", array(), $options);鉤子
通過Requests的鉤子系統,我們可以通過注冊自己的鉤子去擴展Requests的功能:
php$hooks = new Requests_Hooks(); $hooks->register("requests.after_request", "mycallback"); $request = Requests::get("http://httpbin.org/get", array(), array("hooks" => $hooks));
自定義驗證Request提供的鉤子請看:http://requests.ryanmccue.info/docs/hooks.html
通過實現Requests_Auth接口,我們可以為請求添加自定義的驗證。假設服務器會檢查HTTP請求里的Hotdog請求頭的值是不是為Yummy。我們先實現我們的驗證類:
phpclass MySoftware_Auth_Hotdog implements Requests_Auth { protected $password; public function __construct($password) { $this->password = $password; } public function register(Requests_Hooks &$hooks) { $hooks->register("requests.before_request", array(&$this, "before_request")); } public function before_request(&$url, &$headers, &$data, &$type, &$options) { $headers["Hotdog"] = $this->password; } }
可以看到,類實現了Requests_Auth接口,同時代碼實現也用到了鉤子。下面我們通過options的auth去調用我們的自定義驗證:
php$options = array( "auth" => new MySoftware_Auth_Hotdog("yummy") ); $response = Requests::get("http://hotdogbin.org/admin", array(), $options);Why Requests?
文章開始提到了Requests的一些優點,這個官網有個專門的頁面進行詳細的介紹,同時還提到了Requests跟其他類似類庫的對比。通過這個對比,大家對Requests會有進一步的認識,同時也科普下還有哪些HTTP請求相關的類庫。
請猛擊:http://requests.ryanmccue.info/docs/why-requests.html
http://requests.ryanmccue.info/
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/20964.html
摘要:背景由于各種原因,沒有接入完整的調用鏈追蹤,。顯然,有基本的操作。抽取整個對象的所有對象實例隊列中的結果不足框架中不可避免的使用了操作,或者其他業務代碼中也使用。這樣導致鉤子函數無法正常完成他的使用。 背景 由于各種原因,沒有接入完整的調用鏈追蹤,(┬_┬)。但是我們自身再通過php的curl調用各端接口時,會請求多次。那么有沒有一種方法可以在不植入業務代碼的前提下,捕捉到這些curl...
摘要:總結了框架與架構的區別。站在框架之外,看框架,看框架的共同特征與功用。由于框架所帶來的問題,以性能可擴展問題,相對嚴重,所以分析性能的改造方向,總結了六大點。包括框架介紹,的使用,以及。 六、各項實踐,性能評測 下面進入性能評測,評測我們相對就比較快速一些。直接用ab命令,來測試上面的所提及的一些改進。 以下評測,所有測試頁面,均為:http://hjvote.app.ucai.cn/...
摘要: ;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ; ;;;;;;;;;;;;;;;;;;;;; ; All relative paths in this configuration file are relative to PHPs install ; prefix (/usr/local/php). This prefix can be dyn...
摘要:可以在入口文件中定義,然后新建文件夾,達到將應用配置放到該文件的目的,這樣方便將配置進行統一管理。動態配置返回數據類型功能同上張三男請求成功 ThinkPHP5 ThinkPHP是一個免費開源的、快速簡單的、面向對象的、輕量級PHP開發框架。 為什么選擇ThinkPHP5? ThinkPHP5采用了全新的架構思想; 優化了核心是一個顛覆性的版本; 支持composer方式安裝; 對...
閱讀 2803·2023-04-25 18:06
閱讀 2588·2021-11-22 09:34
閱讀 1692·2021-11-08 13:16
閱讀 1315·2021-09-24 09:47
閱讀 3056·2019-08-30 15:44
閱讀 2780·2019-08-29 17:24
閱讀 2592·2019-08-23 18:37
閱讀 2442·2019-08-23 16:55