成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【PHP類庫(kù)】Requests - A humble HTTP request library

animabear / 1260人閱讀

摘要:相對(duì)于等類庫(kù)來(lái)說(shuō),它具有簡(jiǎn)單易用且友好的,且不依賴于。它支持和等方法,基本能滿足任何形式的請(qǐng)求。不依賴于任何標(biāo)準(zhǔn)庫(kù)外的擴(kuò)展,唯一的要求就是需要的版本。原始的響應(yīng)數(shù)據(jù)。標(biāo)識(shí)請(qǐng)求是否成功。

Requests是一個(gè)PHP的HTTP類庫(kù)。相對(duì)于cURL等類庫(kù)來(lái)說(shuō),它具有簡(jiǎn)單易用且友好的API,且不依賴于cURL。它支持HEAD、 GET、 POST、 PUT、 DELETE和PATCH等方法,基本能滿足任何形式的HTTP請(qǐng)求。

Requests不依賴于任何PHP標(biāo)準(zhǔn)庫(kù)外的擴(kuò)展,唯一的要求就是需要PHP5.2+的版本。但是如果PHP的cURL可用,Requests會(huì)優(yōu)先使用它,否則會(huì)使用socket。

安裝和使用 通過(guò)Composer安裝
{
    "require": {
        "rmccue/requests": ">=1.0"
    },
    "autoload": {
        "psr-0": {"Requests": "library/"}
    }
}
自動(dòng)加載

可以使用Composer的加載器:

phpinclude("/path/to/composer/vendor/autoload.php");

也可以使用Requests自帶的:

phpinclude("/path/to/library/Requests.php");

Requests::register_autoloader();
各種請(qǐng)求 GET請(qǐng)求
php$response = Requests::get("http://httpbin.org/get");
POST請(qǐng)求
php$response = Requests::post("http://httpbin.org/post");

需要傳數(shù)據(jù)的話,可以使用第三個(gè)參數(shù):

php$data = array("key1" => "value1", "key2" => "value2");
$response = Requests::post("http://httpbin.org/post", array(), $data);

如果需要傳原始數(shù)據(jù)的話,第三個(gè)參數(shù)請(qǐng)傳字符串。

其他請(qǐng)求

其他請(qǐng)求方法都大同小異:

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()方法的第二個(gè)參數(shù)為必傳。

Requests::request()方法

看API文檔,你會(huì)發(fā)現(xiàn)這些方法接受的參數(shù)幾乎一樣:$url$headers,$data(只有POST、PUT和PATCH有),$options。事實(shí)上它們只是對(duì)Requests::request()方法進(jìn)行了一次封裝:

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允許我們自定義請(qǐng)求頭,例如POST方法的話,我們通常需要指定Content-Type,使服務(wù)器知道我們正在發(fā)送的的數(shù)據(jù)是什么格式:

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允許我們對(duì)請(qǐng)求進(jìn)行配置,例如超時(shí)時(shí)間:

php$options = array(
    "timeout" => 5
);
$response = Requests::get("https://httpbin.org/", array(), $options);
  

更多的選項(xiàng)配置請(qǐng)看:http://requests.ryanmccue.info/api/source-class-Requests.html#_request

Requests里所有的請(qǐng)求方法(HEAD、 GET、 POST、 PUT、 DELETE和PATCH)返回的都是一個(gè)Requests_Response對(duì)象,這個(gè)對(duì)象包含了響應(yīng)的各種信息:

$body:響應(yīng)體。

$raw:原始的HTTP響應(yīng)數(shù)據(jù)。

$headers:響應(yīng)頭。

$status_code:狀態(tài)碼。

$success:標(biāo)識(shí)請(qǐng)求是否成功。

$redirects:請(qǐng)求的重定向次數(shù)。

$url:請(qǐng)求的URL。

$history:請(qǐng)求的歷史記錄。

$cookies:cookie信息。

  

更多Requests_Response的信息請(qǐng)看:http://requests.ryanmccue.info/api/source-class-Requests.html#_request

Session處理

當(dāng)你需要對(duì)同一網(wǎng)站發(fā)出多個(gè)請(qǐng)求,那么Requests_Session對(duì)象可以幫到輕易的設(shè)置一些默認(rèn)參數(shù):

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的構(gòu)造函數(shù)接受urlheaders、dataoptions這4個(gè)參數(shù),順序跟Requests::request()方法一致。同時(shí)你也可以通過(guò)訪問(wèn)屬性的方式去修改options參數(shù):

php// 設(shè)置option屬性
$session->useragent = "My-Awesome-App";

// 跟上面的作用一致
$session->options["useragent"] = "My-Awesome-App";

更多Requests_Session的信息請(qǐng)看:http://requests.ryanmccue.info/api/source-class-Requests_Session.html

HTTPS請(qǐng)求

Requests會(huì)默認(rèn)幫忙處理HTTPS請(qǐng)求,就跟在瀏覽器訪問(wèn)HTTPS網(wǎng)站一樣:

php$response = Requests::get("https://httpbin.org/");

但是如果你想使用其他的證書(shū)或者自簽證書(shū),你可以指定證書(shū)文件(PEM格式):

php$options = array(
    "verify" => "/path/to/cacert.pem"
);
$response = Requests::get("https://httpbin.org/", array(), $options);

如果你想禁用HTTPS的驗(yàn)證,可以通過(guò)設(shè)置options"verify" => false。

HTTP基本驗(yàn)證

HTTP基本驗(yàn)證功能可以通過(guò)optionsauth實(shí)現(xiàn):

php$options = array(
    "auth" => array("user", "password")
);
Requests::get("http://httpbin.org/basic-auth/user/password", array(), $options);
進(jìn)階使用 使用代理

代理可以通過(guò)optionsproxy實(shí)現(xiàn):

php$options = array(
    "proxy" => "127.0.0.1:3128"
);
Requests::get("http://httpbin.org/ip", array(), $options);

如果代理需要驗(yàn)證:

php$options = array(
    "proxy" => array( "127.0.0.1:3128", "my_username", "my_password" )
);
Requests::get("http://httpbin.org/ip", array(), $options);
鉤子

通過(guò)Requests的鉤子系統(tǒng),我們可以通過(guò)注冊(cè)自己的鉤子去擴(kuò)展Requests的功能:

php$hooks = new Requests_Hooks();
$hooks->register("requests.after_request", "mycallback");

$request = Requests::get("http://httpbin.org/get", array(), array("hooks" => $hooks));
  

Request提供的鉤子請(qǐng)看:http://requests.ryanmccue.info/docs/hooks.html

自定義驗(yàn)證

通過(guò)實(shí)現(xiàn)Requests_Auth接口,我們可以為請(qǐng)求添加自定義的驗(yàn)證。假設(shè)服務(wù)器會(huì)檢查HTTP請(qǐng)求里的Hotdog請(qǐng)求頭的值是不是為Yummy。我們先實(shí)現(xiàn)我們的驗(yàn)證類:

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;
    }
}

可以看到,類實(shí)現(xiàn)了Requests_Auth接口,同時(shí)代碼實(shí)現(xiàn)也用到了鉤子。下面我們通過(guò)optionsauth去調(diào)用我們的自定義驗(yàn)證:

php$options = array(
    "auth" => new MySoftware_Auth_Hotdog("yummy")
);
$response = Requests::get("http://hotdogbin.org/admin", array(), $options);
Why Requests?

文章開(kāi)始提到了Requests的一些優(yōu)點(diǎn),這個(gè)官網(wǎng)有個(gè)專門的頁(yè)面進(jìn)行詳細(xì)的介紹,同時(shí)還提到了Requests跟其他類似類庫(kù)的對(duì)比。通過(guò)這個(gè)對(duì)比,大家對(duì)Requests會(huì)有進(jìn)一步的認(rèn)識(shí),同時(shí)也科普下還有哪些HTTP請(qǐng)求相關(guān)的類庫(kù)。
請(qǐng)猛擊:http://requests.ryanmccue.info/docs/why-requests.html

參考

http://requests.ryanmccue.info/

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/20964.html

相關(guān)文章

  • CodeIgniter框架中抽取部分類庫(kù)做問(wèn)題追蹤的思路

    摘要:背景由于各種原因,沒(méi)有接入完整的調(diào)用鏈追蹤,。顯然,有基本的操作。抽取整個(gè)對(duì)象的所有對(duì)象實(shí)例隊(duì)列中的結(jié)果不足框架中不可避免的使用了操作,或者其他業(yè)務(wù)代碼中也使用。這樣導(dǎo)致鉤子函數(shù)無(wú)法正常完成他的使用。 背景 由于各種原因,沒(méi)有接入完整的調(diào)用鏈追蹤,(┬_┬)。但是我們自身再通過(guò)php的curl調(diào)用各端接口時(shí),會(huì)請(qǐng)求多次。那么有沒(méi)有一種方法可以在不植入業(yè)務(wù)代碼的前提下,捕捉到這些curl...

    沈儉 評(píng)論0 收藏0
  • 各開(kāi)源框架使用與設(shè)計(jì)總結(jié)(三)

    摘要:總結(jié)了框架與架構(gòu)的區(qū)別。站在框架之外,看框架,看框架的共同特征與功用。由于框架所帶來(lái)的問(wèn)題,以性能可擴(kuò)展問(wèn)題,相對(duì)嚴(yán)重,所以分析性能的改造方向,總結(jié)了六大點(diǎn)。包括框架介紹,的使用,以及。 六、各項(xiàng)實(shí)踐,性能評(píng)測(cè) 下面進(jìn)入性能評(píng)測(cè),評(píng)測(cè)我們相對(duì)就比較快速一些。直接用ab命令,來(lái)測(cè)試上面的所提及的一些改進(jìn)。 以下評(píng)測(cè),所有測(cè)試頁(yè)面,均為:http://hjvote.app.ucai.cn/...

    objc94 評(píng)論0 收藏0
  • PHP|標(biāo)準(zhǔn)配置之php-fpm.conf

    摘要: ;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ; ;;;;;;;;;;;;;;;;;;;;; ; All relative paths in this configuration file are relative to PHPs install ; prefix (/usr/local/php). This prefix can be dyn...

    wfc_666 評(píng)論0 收藏0
  • PHP 7 新特征

    摘要:本次發(fā)布標(biāo)志著新的重要的系列的開(kāi)始。經(jīng)過(guò)社區(qū)投票,新項(xiàng)目命名為。結(jié)果如下結(jié)果如下四新特性標(biāo)量類型聲明有兩種模式強(qiáng)制默認(rèn)和嚴(yán)格模式。已廢棄的和函數(shù)已被移除。在中,如果發(fā)生這種情況,會(huì)引發(fā)錯(cuò)誤,并且返回。 最好的語(yǔ)言發(fā)布了新的版本,一個(gè)劃時(shí)代的大版本:PHP7。 PHP7修復(fù)了大量BUG,新增了功能和語(yǔ)法糖。這些改動(dòng)涉及到了核心包、GD庫(kù)、PDO、ZIP、ZLIB等熟悉和不熟悉的核心功能與...

    Channe 評(píng)論0 收藏0
  • TP5學(xué)習(xí)記錄(Controller篇)

    摘要:可以在入口文件中定義,然后新建文件夾,達(dá)到將應(yīng)用配置放到該文件的目的,這樣方便將配置進(jìn)行統(tǒng)一管理。動(dòng)態(tài)配置返回?cái)?shù)據(jù)類型功能同上張三男請(qǐng)求成功 ThinkPHP5 ThinkPHP是一個(gè)免費(fèi)開(kāi)源的、快速簡(jiǎn)單的、面向?qū)ο蟮?、輕量級(jí)PHP開(kāi)發(fā)框架。 為什么選擇ThinkPHP5? ThinkPHP5采用了全新的架構(gòu)思想; 優(yōu)化了核心是一個(gè)顛覆性的版本; 支持composer方式安裝; 對(duì)...

    leone 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<