Charles Map Local не работает для данных JSON?

Я пытаюсь имитировать (издеваться над ним) сервер с помощью Charles. Я узнал, что у Чарльза есть что-то под названием "местная карта"..."что позволяет мне отвечать клиенту, используя файлы, которые я сохранил локально.

файлы, на которые я указываю, были сохранены, щелкнув правой кнопкой мыши в списке последовательности Чарльза и выбрав "сохранить ответ...".

однако при тестировании этого с помощью моего приложения iOS я получаю следующее сообщение об ошибке:

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

Так как я не посылаю ответ с правильной информацией заголовка для типа контента. Есть ли способ сказать Чарльзу, что ответ-JSON? Возможная проблема заключается в том, что сохраненные файлы содержат только данные JSON, а не какой-либо заголовок.

2 ответов


вам нужно добавить правило перезаписи в Charles, чтобы изменить заголовок Content-Type обратно в application/json.

карта Local даст только текст / простой тип контента.

для этого перейдите в меню Сервис > переписать... > Добавлять.

добавьте все местоположения, которые вы сопоставляете локально, а затем для правил добавьте тот, который выглядит следующим образом:

rewrite rule

Я бы никогда не рекомендовал корректировать ваш код только для Чарльза, поскольку это побеждает точка тестирования веб-служб, если вы не можете точно их реплицировать.


Я знаю, что вы спрашиваете, как сказать Чарльзу относиться к ответу как к JSON, но, с другой стороны, есть и другое решение.

Я вижу, что вы используете AFNetworking. Ваш запрос ожидает получить "text/json", "application/json", "text/javascript" но ваши файлы text/plain поэтому нам нужно изменить это. При строительстве AFHTTPRequestOperation вы можете установить acceptableContentTypes С этой строкой кода operation.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];