anyproxyルールモジュールがインタフェース機能モックを実装します

序文

AnyProxyは、要求をインターセプトし、さらに応答サーバを修正することができ、インターフェースモック機能を実現する、キャプチャすることができません。
インタビューは、多くの場合、第三者がドッキングテスト環境を提供しなかった場合は、第三者にそのような支払いをテストする方法を尋ねたとき、私たちは、支払状況返されたインターフェイスの様々なシミュレートするモックサーバーを設定する必要があります。

規則モジュール

AnyProxyは能力の二次開発を提供し、あなたは、ネットワーク要求の定義から独自のルールのJSモジュール(ルール)、処理ロジックを記述することができます。

注意:ルールを引用する前に、信頼できるソースからのファイルを確認して、セキュリティ上の問題を避けるために、

  • 送信された要求をインターセプトして変更

コンテンツ等リクエストヘッダ(要求ヘッダー)、リクエストボディ(リクエストボディ)、および要求の偶数ターゲットアドレスを含むことができます

  • サーバの応答をインターセプトして変更

修正は、内容に応じて、HTTPステータスコード(状態コード)、最初の応答(レスポンスヘッダ)を含みます

  • インターセプトHTTPSは、コンテンツに変更を加えることを要求します

基本的に中間者攻撃(man-in-the-middle攻撃)、クライアントは、事前にCA AnyProxy生成を信頼する必要があります

開発サンプル

栗の場合:ルールモジュールを記述する必要性、GET  http://httpbin.org/user-agent  プラス試験情報で戻り値、および5秒の遅延が返されます

ステップ1、あなたはどこでもコンピュータを置くことができ、sample.jsファイルを保存し、次のルールを書きます

// file: sample.js
module.exports = {
  summary: 'a rule to hack response',
  *beforeSendResponse(requestDetail, responseDetail) {
    if (requestDetail.url === 'http://httpbin.org/user-agent') { const newResponse = responseDetail.response; newResponse.body += '- AnyProxy Hacked!'; return new Promise((resolve, reject) => { setTimeout(() => { // delay resolve({ response: newResponse }); }, 5000); }); } }, };

ステップ2、出発AnyProxy、ローディング規則

anyproxy -i --rule sample.js

あなたが見るときに表示されます。アクティブなルールは次のとおりです。成功をロードされた応答をハックするルール

ステップ3、テストルール

カールテスト付き

カール  http://httpbin.org/user-agent  --proxy  http://127.0.0.1:8001

また、テストするためにブラウザを使用するHTTPプロキシ127.0.0.1:8001にブラウザを設定、アクセスすることができます  http://httpbin.org/user-agent次のように期待リターンがあり、プロキシサーバの後、

{
  "user-agent": "curl/7.43.0"
}
- AnyProxy Hacked!

ステップ4、リクエスト情報を表示する。ブラウザはhttp://127.0.0.1:8002にアクセスするための、インターフェースはただ情報を要求見ることができます

プロセスフロー

プロキシ経由の場合は、HTTPリクエスト、具体的なプロセスは次のとおりです。

- などの方法、ヘッダ、本体、を含む収集要求すべての要求パラメータ

  • AnyProxy beforeSendRequestメソッド呼び出し規則モジュールは、モジュールが処理され、新しいパラメータ要求を返す、または応答内容を返します
  • beforeSendRequestは、応答の内容を返す場合は、この応答は、すぐに(実サーバに送信されるのではなく)クライアントに返され、処理は終了します。
  • リクエストに応じて、サーバへの要求は、サーバーが応答を受信します。
  • コンテンツに応じて、モジュールによって処理BeforeSendResponseメソッド呼び出し規則モジュール、
  • クライアントに戻す応答情報

プロキシサーバーは、要求のhttpsを受信すると、AnyProxyは、証明書、明示的に解決なされた要求を置き換えることができます。

  • beforeDealHttpsRequest法規則モジュールを呼び出し、それがtrueを返した場合、明示的に要求を解決します、他の要求は処理されません
  • 後は、平文HTTPS要求は、httpと一貫プロセスフローを解析されます。明示処理のためのルールモジュールを再入力しません要求を解決できません。

どのように引用します

いくつかの方式が、参照ルールモジュールとして使用することができます。

ローカルパスを使用します

anyproxy --rule ./rule.js

オンラインのアドレスを使用します

anyproxy --rule  https://sample.com/rule.js

NPMパッケージを使用して、AnyProxy使用が必要()ローカルルールをロードするために、あなたは、ローカルNPMパッケージのパスパラメータ、またはグローバルインストールパッケージのNPMを渡すことができます

anyproxy --rule ./myRulePkg/ #本地包 npm i -g myRulePkg && anyproxy --rule myRulePkg #全局包

rule接口文档

规则模块应该符合cmd规范,一个典型的规则模块代码结构如下。模块中所有方法都是可选的,只需实现业务感兴趣的部分即可。

module.exports = {
// 模块介绍
summary: 'my customized rule for AnyProxy',
// 发送请求前拦截处理
*beforeSendRequest(requestDetail) { /* ... */ }, // 发送响应前处理 *beforeSendResponse(requestDetail, responseDetail) { /* ... */ }, // 是否处理https请求 *beforeDealHttpsRequest(requestDetail) { /* ... */ }, // 请求出错的事件 *onError(requestDetail, error) { /* ... */ }, // https连接服务器出错 *onConnectError(requestDetail, error) { /* ... */ } };

更多资料参考anyproxy 官方文档https://github.com/alibaba/anyproxy/blob/master/docs/cn/src_doc.md

转自:https://www.cnblogs.com/yoyoketang/p/10873026.html

おすすめ

転載: www.cnblogs.com/dreamhighqiu/p/10990049.html