17

Charles を使用してサーバーをシミュレート (モック) しようとしています。Charles には「Map Local...」と呼ばれるものがあり、ローカルに保存したファイルを使用してクライアントに返信できることがわかりました。

私が指摘しているファイルは、Charles Sequence リストを右クリックし、[応答を保存...] を選択して保存されています。

ただし、iOS アプリでこれをテストすると、次のエラー メッセージが表示されます。

Failed to get areas: Error Domain=AFNetworkingErrorDomain Code=-1016 "Expected content type {(
    "text/json",
    "application/json",
    "text/javascript"
)}, got text/plain" 

そのため、どういうわけか、コンテンツ タイプの正しいヘッダー情報を含む応答を送信していません。応答が JSON であることをチャールズに伝える方法はありますか? 考えられる問題は、格納されたファイルに JSON データのみが含まれ、ヘッダーが含まれていないことです。

4

2 に答える 2

40

Content-Type ヘッダーを application/json に戻すには、Charles に書き換えルールを追加する必要があります。

Map Local は text/plain Content-Type のみを提供します。

これを行うには、[ツール] > [書き換え...] > [追加] に移動します。

ローカルにマッピングするすべての場所を追加してから、ルールについて次のような場所を追加します。

ルールを書き換える

Charles のためだけにコードを調整することは決してお勧めしません。Web サービスを正確に複製できない場合、Web サービスをテストする意味がなくなるからです。

于 2014-02-18T14:02:58.547 に答える
0

Charles に応答を JSON として扱うように指示する方法を尋ねていることは知っていますが、一方で別の解決策もあります。

AFNetworking を使用していることがわかります。あなたのリクエストは受け取る予定"text/json", "application/json", "text/javascript"ですが、あなたのファイルは受け取っているtext/plainので、これを変更する必要があります。ビルド中に、このコード行で AFHTTPRequestOperation設定できますacceptableContentTypesoperation.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];

したがって、コード全体は次のようになります

AFHTTPRequestOperation* operation = [manager HTTPRequestOperationWithRequest:req success:^(AFHTTPRequestOperation *operation, id responseObject) {

   //success

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

  //failure
 }];

operation.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];
[operation start];
于 2014-02-18T11:33:13.093 に答える