【问题标题】:Charles Map Local not working for JSON data?Charles Map Local 不适用于 JSON 数据?
【发布时间】:2014-03-16 18:33:01
【问题描述】:

我正在尝试使用 Charles 模拟(模拟)服务器。我发现 Charles 有一个叫做“Map Local...”的东西,它允许我使用我在本地存储的文件回复客户。

我指向的文件已通过右键单击查尔斯序列列表并选择“保存响应...”来存储。

但是,当我使用我的 iOS 应用程序进行测试时,我收到以下错误消息:

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

所以不知何故,我没有发送带有正确内容类型标头信息的响应。有没有办法告诉查尔斯响应是 JSON?一个可能的问题是存储的文件只包含 JSON 数据而不包含任何标题。

【问题讨论】:

  • 对该工具一无所知,但请确保您的文件具有 .json 后缀。如果这样不行,你需要弄清楚如何设置 mime 类型。

标签: ios json mocking charles-proxy


【解决方案1】:

我知道您在问如何告诉 Charles 将响应视为 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];

【讨论】:

    【解决方案2】:

    您需要在 Charles 中添加重写规则,将 Content-Type 标头改回 application/json。

    Map Local 只会给出 text/plain Content-Type。

    为此,请转到工具 > 重写... > 添加。

    添加您在本地映射的所有位置,然后为规则添加一个如下所示的位置:

    我绝不会建议只为 Charles 调整您的代码,因为如果您不能完全复制它们,那么这会破坏测试您的 Web 服务的意义。

    【讨论】:

    • 感谢就像一个魅力。没想到查尔斯这么厉害。这个重写功能提供了很多可能性。
    • @AdamSmith 是的!它没有很好的文档记录,但是一旦您了解了所有功能,它就很棒!
    • 我刚刚映射了一个名为“localFile.json”的本地文件,并在我的测试响应中得到了"Content-Type" = "application/json"...我来到这里寻找一种修改响应标题的方法不过,还没有运气。
    • Charles 将添加适合您用于本地地图的文件类型的标题值。如果您想要application/json 用于Content-Type,请确保映射文件的类型为.json。这将防止您必须创建额外的重写。
    猜你喜欢
    • 2011-04-28
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    相关资源
    最近更新 更多