序文
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