キーテイクアウト
-
PHP-HTTPによるプロジェクトであるHttPlugは、あらゆるHTTPクライアントをSDKに簡単に注入できるようになり、既に使用されているHTTPクライアントが既に使用されていて、ガズルの使用を避けたいアプリケーションのソリューションを提供します。
- httplugインターフェイスパッケージとGuzzle 6を一緒に引き込むことができます。これにより、httplugのhttpclientインターフェイスを実装するGuzzle 6またはその他のアダプターを使用できます。 PHP-HTTPプロジェクトは、Guzzle 5および6、およびZend1と2を含むPHPのすべてのHTTPクライアントを最大限にサポートすることを目的としています。 🎜>
- diffbot SDKは、HTTPクライアントの他の実装とPSR-7の互換性と受容性になりました。すべてが箱から出して作業するために、HTTPLUGインターフェイスを尊重するアダプターのみが必要です。 httplugは、アプリでHTTPクライアントの実装を抽象化するための新しいアプローチを提供し、抽象化の1つの追加レイヤーのコストの拡張性を提供します。
- この記事は、MárkSági-KazárとDavid Buchmannによってピアレビューされました。 SetePointコンテンツを最高にするためにSitePointのピアレビュアーのすべてに感謝します!
- 以前のシリーズでは、diffbot用のPHPクライアントを構築しました。クライアントはうまく機能し、比較的広く使用されています。ライブアプリでテストして、標準に達していることを確認しましたが、Guzzle 5に大きく依存します。 これには2つの問題があります:
アプリにクライアントを実装している人は、すでに好ましいHTTPクライアントを使用している可能性があり、Guzzleではなく使用したいと考えています。 SDKへのhttpクライアントを簡単に注入できるようにする必要があります。
偶然にも、それを行うことができる新しいプロジェクトがあります:httplug。
- 注:フォローするDiffbot SDKの内部ロジックに精通する必要はありません。この記事のプロセスは、具体的なHTTPクライアントの実装を備えた任意のパッケージに適用でき、簡単に従うことができます。 php-httpおよびhttplug
-
PHP-HTTPは、PHPのHTTP関連ツールのGitHub組織です。 PSR-7リクエストと応答に加えて最小限のHTTPクライアント契約を定義するためのインターフェイスと例外のコレクションであるHTTPlugを提供します。この契約の実装は、仮想パッケージのphp-http/client-implementationを提供しますこれは、Guzzle 6を使用する人が作曲家を使用している人が、Adapterの依存関係として、Adapter、Httplug Interfaceパッケージ、およびGuzzle 6自体を引き込むためにphp-http/guzzle6-adapterを必要とすることを意味します。
httplugは、再利用可能なパッケージのエントリポイントです。これは、すべてのクライアント(guzzle6アダプターなど)が基づいているクライアントの抽象化です。これらのクライアントはさらに、基礎となるパッケージ /依存関係をさらに利用します - この場合はguzzle 6。
だから、下から上:HTTPクライアントが存在します(Guzzle 6)
- Guzzle 6アダプターは、インターフェイスとしてHTTPlugを使用して構築されています。Guzzle6
- をラップします。 http呼び出しを必要とする必要があるアプリは、クライアントを必要とし、httplugのhttpclientインターフェイスが必要です。
- アプリは、Guzzle 6、またはhttplugのhttpclientインターフェイスを実装し、別のサードパーティのhttpクライアントをラッピングする他のアダプターを使用できます
- チームの計画は、最終的にPHPランドのすべてのさまざまなHTTPクライアントを最大限にサポートすることです:Guzzle 6、Guzzle 5、Zend2、Zend1など。クライアントバージョン、そして適切なアダプターをミックスに接続するだけです。
- adapter
クライアント
という用語を使用することに注意してください。ここでは、Httplugに基づくアダプターは両方です。彼らは既存のクライアントを中心にラッパーですが、クライアント自身として直接使用されています。 この投稿の計画は、DiffbotのPHPクライアントのコンクリートガズル5依存関係をHTTPlugバージョンに置き換えることです。注:httplugおよび関連パッケージはアルファソフトウェアであるため、変更される場合があります。それらを使用するために何でも変換することは、危険な努力です ブートストラップ いつものように、環境をブートストラップするために改善されたHomesteadを使用することをお勧めします。準備ができたら、SDKの現在の安定したバージョンをクローンしてテストできます。
最後のコマンドは、phpunitが開発環境にグローバルにインストールされていると想定しています。 すべてのテストに合格するはずです(ナンセンスのために盗聴されていないスキップされたテストを除く)。したがって、変換を開始する準備ができています。
始めましょう最初に、このアップグレードを開発するための新しいブランチを作成する必要があります。
次に、Composer.jsonファイルに2つの依存関係を追加します:git clone https://github.com/swader/diffbot-php-client cd diffbot-php-client git checkout tags/0.4.5 composer install phpunit
これが行うことは、これがクライアントに、これからは仮想パッケージ - これに依存することを伝えます。これは、使用するために、Diffbotクライアント(このような)を使用するアプリケーション(このパッケージの実装(Packagistのリンクにリストされているものの1つ)を選択する必要があることを意味します。もちろん、パッケージの開発中に、実際の実装なしですべてが機能しているかどうかをテストして確認することは不可能であるため、追加の要件依存関係を指定します。上記の特定のケースでは、「php-http/guzzle6-adapter」:「〜0.2@dev」を使用します。単に最新のものであり、安定したリリースがないという理由だけで、その特定のバージョンを選択しました。
注:通常のようにターミナルで依存関係をインタラクティブに宣言するのではなく、なぜcomposer.jsonに値を追加するアプローチを使用したのか疑問に思うかもしれません。これは、作曲家が仮想パッケージで要求することでエラーがスローされるためです。パッケージは実際には存在せず、仮想名、プレースホルダーだけなので、作曲家はインストールを知らずに混乱します。これへの変更を示唆する問題がありますが、すぐに起こることはありません。php-httpパッケージはまだ激しい開発中であるため、次の2つの値をcomposer.jsonファイルに追加する必要があります。 これは、開発パッケージ(安定)のインストールを許可することですが、存在する場合は安定したバージョンを好みます。したがって、非常に不安定なPHPunit 5.2.xをフェッチするのではなく、5.0.8(執筆時点で最も最新)を取得しますが、持っていないパッケージを尋ねると成功します。安定したリリース(guzzle6-adapterなど)。
また、guzzle6をインストールする場合は、guzzle5への依存性を削除する必要があります。最終的な要求ブロックは次のようになります:git checkout -b feature-httplug
プランコールの結果は、$応答として保存されます。これはguzzle5応答です。その応答は、その有効性をチェックし、そこからエンティティを構築するエンティティファクトリーによってさらに処理され、エンティティイテレーターにプッシュされます。 したがって、計画は
です- diffbot :: sethttpclientをhttplug実装を受け入れるメソッドに置き換えます
- API要約、クロール、および検索クラスのコールメソッドを変更して、提供されたHTTPクライアントの実装でGETリクエストを発行できるようにします。 エンティティファクトリーとエンティティのイテレーターを変更して、それらがもはやguzzle5バージョンの応答に依存せず、むしろPSR-7カウンターパートに依存します。
- PHP-HTTPプロジェクトには、httpmethodsclientを含む追加のパッケージ、utilsがあります。そのクラスは、メッセージファクトリーとHTTPクライアントを1つの全体に包み、Get、投稿などの一般的に使用される動詞でリクエストを簡単に送信できます。 ..)。さらに、PSR-7 ResponseInterfaceも返します。つまり、GetBodyメソッドが利用可能になります。これは、Tojsonメソッドのみが実装されていないことを意味します。
バトルプランがレイアウトされていると、リファクタリングを始めることができます。
前提条件
追加のパッケージが必要です:
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
または、発見クラスは、クラスの上部にある使用ステートメントを使用してインポートできます。
この変更により、Diffbot SDKのエンドユーザーが次のようになりました。"require": { ... "php-http/client-implementation": "^1.0" }, "require-dev": { ... "php-http/guzzle6-adapter": "~0.2@dev" },
独自のクライアントをインストールし、httpmethodsclientと並行してディスカバリーコンポーネントを自動的に処理させます。
を完全な柔軟性のためにsethttpclientメソッドに注入します "prefer-stable": true, "minimum-stability": "dev"
ほとんどのユーザーはこれをAutoPilotで使用しますapi要約、クロール、検索
次に、通話方法。
- 以前に実装したhttpmethodsclientインスタンスには、getメソッドがあるため、その点で変更は必要ありません。ただし、$ ResponseインスタンスはMistMatchを示しており、正当な理由があります。 EntityFactoryが期待する元の$応答は、guzzle5応答です。
EntityFactoryによって苦情が発行されているため、API要約を編集する必要はありません。それ自体で物事を処理します。クロールクラスのコールカウンターパートは少し違う:
git clone https://github.com/swader/diffbot-php-client cd diffbot-php-client git checkout tags/0.4.5 composer install phpunit
ここでの2つの警告 - $応答のJSONメソッドを使用するメソッドの2行目と、guzzle5応答を期待するエンティティテーターインスタンス化。ここから影響を与えることができる唯一の線は前者ですので、それを変更してみましょう: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"
EntityFactoryクラスには、上部に次のインポートがあります。
これを次のように変更できます
"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;
CheckResponseFormatとcreateApSofsteritoratorメソッドの両方で。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>
テストHTTPリクエストとAPI呼び出しをテストする主な方法であるモッキングは、Guzzle 6では異なるため、テストにはわずかに大きなオーバーホールが必要です。 このチュートリアルはすでに少し長いので、Guzzle 5とGuzzle 6、特にDiffbot SDKの2つのバージョン間のモッキングの違いを学ぶことに興味がある場合は、関連する機能ブランチをご覧ください。 。
<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>
最後に、テストを実行しましょう:成功!すべての合格(予想されるスキップテストを除く)。
diffbot SDKは、PSR-7互換性だけでなく、HTTPクライアントの他の実装を受容的にしています。必要なのは、httplugインターフェイスを尊重するアダプターだけで、すべてが箱から出して作業する必要があります。
結論$array = json_decode($response->getBody(), true);
アダプターの実装を追加するか、パッケージを試してフィードバックを提供するだけで支援したい場合は、チームはすべての貢献を歓迎します。連絡を取るか、以下のコメントセクションにフィードバックを残してください。このチュートリアルが興味深いと感じた場合は、ボタンのようにヒットすることを忘れないでください!PHP HTTPおよびHTTPLUG
に関するよくある質問(FAQ)
guzzle5とphp http/httplugの違いは何ですか。 Guzzle5は特定のHTTPクライアントであり、PHP HTTPは任意のHTTPクライアントを使用できる抽象化レイヤーです。 HTTPlugは、追加機能を提供するPHP HTTPの拡張機能です。主な違いは、PHP HTTPとHTTPLUGが特定のHTTPクライアントに結び付けられていないため、より柔軟性と相互運用性を可能にすることです。 > Guzzle5からPHP HTTP/HTTPLUGに移行するには、Guzzle5クライアントをPHP HTTPインターフェイスを実装するアダプターに置き換えることが含まれます。これは、guzzle5を含むさまざまなHTTPクライアントにアダプターを提供するHTTPlugライブラリを使用して実行できます。アダプターがセットアップされたら、PHP HTTPメソッドを使用してリクエストを送信し、応答を処理できます。 guzzle5でphp http/httplugを使用すると、柔軟性と相互運用性が向上します。 PHP HTTP/HTTPLUGを使用すると、コードを変更せずに異なるHTTPクライアントを切り替えることができます。これにより、さまざまなクライアントでアプリケーションをテストし、必要に応じてクライアントを切り替えることが容易になります。さらに、HTTPlugは、HTTPクライアントに機能を追加できるプラグインシステムを提供します。 PHPの依存関係管理ツール。コマンドコンポーザーを実行して、php-http/httplugを実行することでインストールできます。これにより、httplugライブラリとその依存関係がダウンロードされます。php http/httplugを使用してリクエストを送信するにはどうすればよいですか?php http/httplugでリクエストを送信するには、最初に作成する必要があります。リクエストオブジェクト。これは、MessageFactoryインターフェイスのCreaterequestメソッドを使用して実行できます。リクエストオブジェクトを取得したら、HTTPCLIENTインターフェイスのSendRequestメソッドを使用して送信できます。 ResponseInterfaceインターフェイスで表されます。 getStatusCode、getheaders、およびgetBodyメソッドを使用して、応答のステータスコード、ヘッダー、および本文にそれぞれアクセスできます。 php http/httplugのディスカバリーコンポーネントは、利用可能なHTTPアダプターとメッセージ工場を自動的に見つけて使用するために使用されます。これにより、異なるHTTPクライアントを切り替え、利用可能な最良の実装を使用しやすくなります。 httpclientdiscoveryまたはmessagefactorydiscoveryクラスの静的検索メソッドを呼び出します。これにより、最初に利用可能なHTTPクライアントまたはメッセージファクトリーのインスタンスが返されます。httplugのプラグインは何ですか?httplugのプラグインを使用して、httpクライアントに機能を追加するために使用します。これらは、認証、キャッシュ、エラー処理などの機能を追加するために使用できます。プラグインコンツクラスのAddPluginメソッドを使用してプラグインをクライアントに追加できます。 httpclientexceptionインターフェイスを実装します。これらの例外をキャッチし、必要に応じてそれらを処理できます。さらに、ErrorPluginを使用して、非200の応答を自動的に例外に変換できます。
以上がphp-httpとhttplugでguzzle5から解放されますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

セッション固定攻撃を防ぐための効果的な方法には、次のものがあります。1。ユーザーがログインした後にセッションIDを再生します。 2。安全なセッションID生成アルゴリズムを使用します。 3。セッションタイムアウトメカニズムを実装します。 4。HTTPSを使用したセッションデータを暗号化します。これらの措置は、セッションの固定攻撃に直面するときにアプリケーションが破壊されないようにすることができます。

セッションのない認証の実装は、サーバー側のセッションストレージなしですべての必要な情報がトークンに保存されるトークンベースの認証システムであるJSonWebtokens(JWT)を使用することで実現できます。 1)JWTを使用してトークンを生成および検証する、2)トークンが傍受されるのを防ぐためにHTTPSが使用されることを確認する、3)クライアント側にトークンを安全に保存する、4)改ざんを防ぐためにサーバー側のトークンを検証する、5)短期アクセスや長期的なリフレイを使用するなどのトークンの取り消しメカニズムを実装する。

PHPセッションのセキュリティリスクには、主にセッションハイジャック、セッションの固定、セッション予測、およびセッション中毒が含まれます。 1。HTTPSを使用してCookieを保護することにより、セッションハイジャックを防ぐことができます。 2。ユーザーがログインする前にセッションIDを再生することにより、セッションの固定を回避できます。3。セッションの予測は、セッションIDのランダム性と予測不可能性を確保する必要があります。 4.セッションの中毒は、セッションデータを確認およびフィルタリングすることで防ぐことができます。

PHPセッションを破壊するには、最初にセッションを開始してから、データをクリアしてセッションファイルを破壊する必要があります。 1。Session_start()を使用してセッションを開始します。 2。Session_unset()を使用して、セッションデータをクリアします。 3.最後に、session_destroy()を使用してセッションファイルを破壊して、データのセキュリティとリソースのリリースを確保します。

PHPのデフォルトセッションの保存パスを変更する方法は?次の手順で達成できます。Session_save_path( '/var/www/sessions'); session_start(); PHPスクリプトで、セッション保存パスを設定します。 session.save_path = "/var/www/sessions"をphp.iniファイルに設定して、セッションの保存パスをグローバルに変更します。 memcachedまたはredisを使用して、ini_set( 'session.save_handler'、 'memcached')などのセッションデータを保存します。 ini_set(

tomodifydatainaphpsession、starthessession withsession_start()、$ _sessiontoset、modify、orremovevariables.1)startthessession.2)

配列はPHPセッションに保存できます。 1。セッションを開始し、session_start()を使用します。 2。配列を作成し、$ _Sessionで保存します。 3. $ _Sessionを介して配列を取得します。 4.セッションデータを最適化してパフォーマンスを向上させます。

PHPセッションガベージコレクションは、有効期限が切れたセッションデータをクリーンアップするために確率メカニズムを通じてトリガーされます。 1)構成ファイルにトリガー確率とセッションのライフサイクルを設定します。 2)Cronタスクを使用して、高負荷アプリケーションを最適化できます。 3)データの損失を避けるために、ごみ収集の頻度とパフォーマンスのバランスを取る必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

メモ帳++7.3.1
使いやすく無料のコードエディター

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ホットトピック









