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 даст только текст / простой тип контента.
для этого перейдите в меню Сервис > переписать... > Добавлять.
добавьте все местоположения, которые вы сопоставляете локально, а затем для правил добавьте тот, который выглядит следующим образом:
Я бы никогда не рекомендовал корректировать ваш код только для Чарльза, поскольку это побеждает точка тестирования веб-служб, если вы не можете точно их реплицировать.
Я знаю, что вы спрашиваете, как сказать Чарльзу относиться к ответу как к 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];