guzlezz 6已經淘汰,並支持PSR 7。雖然Guzzle索賠的作者在可預見的將來將支持Guzzle 5的支持,但持懷疑態度的壽命更加安全。此外,雖然PSR 7可能有其怪癖,但如果僅與其他項目兼容,則遵循PSR是很好的。 有人在其應用中實現我們的客戶端的人可能已經使用了首選的HTTP客戶端,並且希望使用他們的而不是guzzle。我們應該允許在我們的SDK中輕鬆注入任何
http客戶端。巧合的是,有一個新項目允許我們這樣做:httplug。
這意味著使用Guzzle 6 CAN CAN CAN的人需要PHP-HTTP/Guzzle6-Adapter才能吸入適配器,HTTPLUG接口軟件包,而Guzzle 6本身作為適配器的依賴。
httplug是可重複使用軟件包的入口點。所有客戶端(例如Guzles6適配器)均基於客戶抽象。然後,這些客戶進一步利用其基本軟件包 /依賴項 - 在這種情況下,Guzzle 6。>所以,下到頂:
http客戶端存在(guzzle 6)
client
>在這裡幾乎可以互換 - 基於HTTPLUG的適配器都是。他們是圍繞現有客戶的包裝器,但直接用作客戶自己。我們在這篇文章中的計劃是用httplug版本替換difbot php客戶端的混凝土guzzle 5的依賴。 >注意:httplug和相關軟件包是alpha軟件,因此可能會更改。將任何東西轉換為使用它們都是有冒險的努力。
>
>引導
>像往常一樣,建議我們使用改進的宅基地來引導我們的環境。準備好後,我們可以克隆並測試SDK的當前穩定版本:
入門
git clone https://github.com/swader/diffbot-php-client cd diffbot-php-client git checkout tags/0.4.5 composer install phpunit
然後,我們將兩個依賴項添加到我們的composer.json文件中: 這是告訴客戶從現在開始的,這取決於a虛擬軟件包 - 這個。這意味著要使用,使用我們的Diffbot客戶端的應用程序(如此)必須選擇此軟件包的實現(在Packagist上列出的鏈接中列出的一個)。當然,在包裝的開發過程中,不可能測試並查看所有事物是否在沒有實際實施的情況下工作,因此我們指定了額外的要求依賴性。在上面的具體情況下,我們使用“ php-http/guzzle6-apapter”:“ 〜0.2@dev”。我們之所以選擇該特定版本只是因為它是最新的版本,而且沒有穩定的版本。
注意:您可能想知道為什麼我們使用將值添加到composer.json中的方法,而不是像平時一樣在終端中互動地聲明依賴項。這是因為在虛擬軟件包上做作曲家需要的需要會丟失錯誤 - 該軟件包實際上並不存在,只是它的虛擬名稱,佔位符,因此作曲家會感到困惑不知道該安裝什麼。有一個問題暗示對此有所改變,但不太可能很快發生。
>由於PHP-HTTP軟件包仍處於繁重的開發中,因此我們應該在Composer.json文件中添加以下兩個值:
>這是允許安裝開發軟件包(不穩定),但如果存在,則更喜歡穩定的版本。因此,它不會拿出高度不穩定的phpunit 5.2.x,而是將獲取5.0.8(在撰寫本文時最新),但如果我們要求它提供沒有的包裹,它也將成功穩定的版本(例如Guzzle6-apapter)。
計劃 > >此外,該項目還具有發現組件,該組件具有一些用於發現已安裝工廠和客戶的靜態類- 這使我們能夠在某些情況下為最終用戶提供零型配置經驗(請參閱文檔)。
>先決條件 讓我們需要其他軟件包:
此更改現在使Diffbot SDK的最終用戶可以:
>安裝了自己的客戶端,讓發現組件與httpmethodsclient同時自動照顧事物,或
大多數用戶將在Autopilot上使用它。 由於EntityFactory發出的投訴,我們實際上不需要編輯API摘要 - 它將自行處理事情。爬網類的呼叫對手有些不同: >這裡的兩個警告 - 使用$響應的JSON方法的第二行,以及期望Guzzle5響應的實體實例化。從這裡開始我們唯一可以影響的線就是前者,所以讓我們將其更改為: 更改為: 實體類別具有以下導入:
>
>由於本教程已經有點長,如果您有興趣學習Guzzle 5和Guzzle 6之間的模擬差異,請參閱相關的功能分支,具體來說是Diffbot SDK的兩個版本之間。 最後,讓我們進行測試: 成功!所有通過(預期跳過測試除外)。 結論 >
guzzle5和php http/httplug之間有什麼區別。 Guzzle5是特定的HTTP客戶端,而PHP HTTP是一個抽象層,可讓您使用任何HTTP客戶端。 HTTPLUG是PHP HTTP的擴展,可提供其他功能。主要區別在於,PHP HTTP和HTTPLUG允許更具靈活性和互操作性,因為它們不與特定的HTTP客戶端綁定。 >如何使用php http/httplug發送請求? git clone https://github.com/swader/diffbot-php-client
cd diffbot-php-client
git checkout tags/0.4.5
composer install
phpunit
git checkout -b feature-httplug
"require": {
...
"php-http/client-implementation": "^1.0"
},
"require-dev": {
...
"php-http/guzzle6-adapter": "~0.2@dev"
},
呼叫的結果被保存為$響應,這是一個guzzle5響應。然後,該響應由實體工廠進行處理,該工廠檢查其有效性並從中構建實體,將其推入實體迭代器。
因此,該計劃是:
>
> difbot類git clone https://github.com/swader/diffbot-php-client
cd diffbot-php-client
git checkout tags/0.4.5
composer install
phpunit
我們可以將其更改為:
>
git checkout -b feature-httplug
"require": {
...
"php-http/client-implementation": "^1.0"
},
"require-dev": {
...
"php-http/guzzle6-adapter": "~0.2@dev"
},
"prefer-stable": true,
"minimum-stability": "dev"
api摘要,爬網和搜索
因為我們之前實現的httpmethodsclient實例具有GET方法,因此在這方面不需要更改。但是,$響應實例顯示了一個誤匹配,並且有充分的理由。 EntityFactory預期的原始$響應是Guzzle5響應。git clone https://github.com/swader/diffbot-php-client
cd diffbot-php-client
git checkout tags/0.4.5
composer install
phpunit
git checkout -b feature-httplug
"require": {
...
"php-http/client-implementation": "^1.0"
},
"require-dev": {
...
"php-http/guzzle6-adapter": "~0.2@dev"
},
"prefer-stable": true,
"minimum-stability": "dev"
實體工廠
"require": {
"php" : ">=5.4.0",
"php-http/client-implementation": "^1.0"
},
"require-dev": {
"symfony/var-dumper": "~2",
"phpunit/phpunit": "^5.0",
"php-http/guzzle6-adapter": "~0.2@dev"
},
composer require "php-http/utils" "php-http/discovery"
use GuzzleHttp\Client;
use Http\Client\Utils\HttpMethodsClient as Client;
我們更改:<span>/**
</span><span> * Sets the client to be used for querying the API endpoints
</span><span> *
</span><span> * <span>@param Client $client
</span></span><span> * <span>@see http://php-http.readthedocs.org/en/latest/utils/#httpmethodsclient
</span></span><span> * <span>@return $this
</span></span><span> */
</span><span>public function setHttpClient(Client $client = null)
</span><span>{
</span> <span>if ($client === null) {
</span> <span>$client = new Client(
</span> <span><span>\Http\Discovery\HttpClientDiscovery</span>::find(),
</span> <span><span>\Http\Discovery\MessageFactoryDiscovery</span>::find()
</span> <span>);
</span> <span>}
</span> <span>$this->client = $client;
</span> <span>return $this;
</span><span>}
</span>
<span>public function call()
</span><span>{
</span> <span>$response = $this->diffbot->getHttpClient()->get($this->buildUrl());
</span>
<span>$array = $response->json();
</span>
<span>if (isset($array['jobs'])) {
</span> <span>$jobs = [];
</span> <span>foreach ($array['jobs'] as $job) {
</span> <span>$jobs[] = new JobCrawl($job);
</span> <span>}
</span>
<span>return new EntityIterator($jobs, $response);
</span> <span>} elseif (!isset($array['jobs']) && isset($array['response'])) {
</span> <span>return $array['response'];
</span> <span>} else {
</span> <span>throw new DiffbotException('It appears something went wrong.');
</span> <span>}
</span><span>}
</span>
嘲笑,測試HTTP請求和API調用的主要方式在Guzzle 6中是不同的,因此我們的測試需要大修稍大。
$array = json_decode($response->getBody(), true);
>
經常詢問有關php http和httplug
的問題(常見問題解答)
guzzle5和php http/httplug?
php http/httplug PHP的依賴關係管理工具。您可以通過運行命令作曲家需要PHP-HTTP/HTTPLUG來安裝它。這將下載httplug庫及其依賴項。
>
>如何使用php http/httplug?
以上是用php-http和httplug脫離guzzle5的詳細內容。更多資訊請關注PHP中文網其他相關文章!