web-dev-qa-db-ja.com

Charles Proxyでステータスコードを書き換えることは可能ですか?

Charles Proxyを使用して、テスト目的でAPIからの応答を書き換えています。

ブレークポイントを設定すると、生の応答を完全に書き換えることができます。

ただし、「書き換え」ツールを使用して自動化する場合は、行き詰まります。ステータスコードを変更できないようです。

Rewrite Rule panel

私が何かを逃しているのを知っていますか?

53
Thomas

更新:Charles Proxyのバージョン3.8がリリースされたばかりで、ステータスを書き換えることができます。 リリースノート から:

  • 書き換えツール:応答ステータスの書き換えを許可します

このバージョンの書き換えUIは、新しい「応答ステータス」ルールタイプを追加します。

enter image description here

100
Marc Liyanage

Charles 3.8+を使用して、ステータスコードを書き換えることができます。

書き換えツールで、「タイプ:応答ステータス」を選択します。一致フィールドと置換フィールドでは、Charlesは着信および書き換えられたステータスが"\d{3} .*"。つまり、書き換えられたステータスには、数値ステータスコードに加えてメッセージ部分が必要です。

例えば:

一致値:201。*

置換値:502 Bad Gateway

置換値からメッセージを省略すると、ステータス行は書き換えられません。 Charlesの書き換えツールの出力メッセージは、各通話の概要の[メモ]セクションで確認できます。

14
Marc Kubischta

これはあなたの質問に対する直接的な答えではありませんが、上記のコメントで述べたように、私は同じ状況にあり、私にとってうまく機能する別のツールを使用して解決策を見つけました。

Charlesの代わりに mitmproxy を実行します。具体的には mitmdump で、この短いPython スクリプトの書き換え

#!/usr/bin/env python

def response(context, flow):
    if '/somePath' not in flow.request.path:
        return

    flow.response.status_code = 404

プロキシにフックするには、次のようにmitmdumpを実行します。

mitmdump -s /path/to/rewriting-script.py

そしてそれは素晴らしく機能します。

OS Xを使用していますが、ネットワークインターフェースのWebプロキシを127.0.0.1ポート8080に設定しました。

9
Marc Liyanage

最終編集:Marc Liyanageの答えは、この質問に対して今最も正確です。

いいえ、そうではありません。ステータスコードを書き換えることは不可能だと思います。

これをコメント(新しいユーザー)として追加することはできませんが、1つの回避策は次のとおりです。

  1. 必要なコードを返すサーバーでリソースを作成するか、必要なコードを見つけます。
  2. Map Remote機能を使用して、コードを返すリソースにマッピングします。

これに最適なMap Localを使用してみましたが、Charlesは返されたすべてのファイルに独自の200 OKステータスコードを追加しました。

編集:また、個々の応答にブレークポイントを使用して、コードを変更できます。

4
David Boydell