NSCachedURLResponse 返回对象,但 UIWebView 不解释内容

2023-11-24

我正在向 UIWebView 发送请求。加载的网页上有 AJAX 调用。我需要分析 AJAX 流量以确定用户是否登录。为此,我在 AppDelegate 中安装了 NSURLCache:

MYURLCache *cache = [[MYURLCache alloc] init];
[NSURLCache setSharedURLCache:cache];

此 MYURLCache 类正确接收通过 webview 运行的流量。我只能终止 AJAX 调用。然后我生成一个自己的 AJAX 调用请求。这个从网络服务器返回完美的响应。所以现在要做的最后一步是构造 NSCachedURLResponse 返回对象。我也做到了这一点,但 webview 在返回对象时根本不执行任何操作。如果我只返回 nil,WebView 会正常加载所有内容(nil 是 NSURLCache 的消息,表示没有缓存任何内容,因此 WebView 应该开始自行加载它)。

- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request {
    if ([[[request URL] absoluteString] rangeOfString:@"/ajax/"].location == NSNotFound) {
        return nil;
    } else {

    ASIHTTPRequest *asirequest = [ASIHTTPRequest requestWithURL:[request URL]];
    [asirequest setValidatesSecureCertificate:NO];
    [asirequest startSynchronous];
    NSError *error = [asirequest error];
    NSData* data = [[asirequest responseString] dataUsingEncoding:NSUTF8StringEncoding];

    // Create the cacheable response
    NSURLResponse *urlresponse = [[NSURLResponse alloc] initWithURL:[request URL] MIMEType:@"application/json" expectedContentLength:[data length] textEncodingName:@"UTF-8"];
    NSCachedURLResponse *cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:urlresponse data:data];

    NSLog(@"cachedResponse %@", cachedResponse);
    NSLog(@"cachedResponse data %@", [[NSString alloc] initWithData:[cachedResponse data] encoding:NSUTF8StringEncoding]);

    return cachedResponse;
}  

return nil;
}

我找到了解决这个问题的方法...我认为这与丢失的标头有关。

如果我更换

NSURLResponse *urlresponse = [[NSURLResponse alloc] initWithURL:[request URL] MIMEType:@"application/json" expectedContentLength:[data length] textEncodingName:@"UTF-8"];
NSCachedURLResponse *cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:urlresponse data:data];

With

NSHTTPURLResponse *urlresponse = [[NSHTTPURLResponse alloc] initWithURL:request.URL statusCode:200 HTTPVersion:@"1.1" headerFields:nil];
NSCachedURLResponse *cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:urlresponse data:data];

整个事情都有效。该答案还建议了请求的附加自定义标头。https://stackoverflow.com/a/15234850/274518

NSDictionary *headers = @{@"Access-Control-Allow-Origin" : @"*", @"Access-Control-Allow-Headers" : @"Content-Type"};
NSHTTPURLResponse *urlresponse = [[NSHTTPURLResponse alloc] initWithURL:request.URL statusCode:200 HTTPVersion:@"1.1" headerFields:headers];

就我而言,我不需要它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSCachedURLResponse 返回对象,但 UIWebView 不解释内容 的相关文章

随机推荐

  • WSO2 ESB DBLookup 中介查询多行

    正如 DBLookup Mediator 的文档中所述 它仅返回查询的第一行 其他结果 如果有 将被忽略 我想知道是否有 最佳方法 来运行返回多个记录然后处理它们的查询 SELECT FROM X 现在我们正在实现 axis2 服务 但是还
  • 正则表达式匹配文件夹和所有子文件夹

    我需要为备份排除过滤器编写正则表达式以排除文件夹及其所有子文件夹 我需要匹配以下内容 folder1 statistics folder1 statistics folder2 statistics folder2 statistics 我
  • XGBoost - 具有不同曝光/偏移的泊松分布

    我正在尝试使用 XGBoost 对不等长的暴露期生成的数据的索赔频率进行建模 但无法让模型正确处理暴露 我通常会通过将 log exposure 设置为偏移量来做到这一点 你能在 XGBoost 中做到这一点吗 这里发布了类似的问题 xgb
  • firebase 身份验证/无效的自定义令牌

    我正在尝试使用 firebase admin sdk 生成自定义令牌 const uid 91f0bf4c 3e3c 441c a21d 6a7fee341db5 firebaseAdmin auth createCustomToken u
  • 如何训练 libsvm 格式的图像(像素)数据以用于 Java 识别

    我想制作一个 Java 应用程序来使用 libsvm 来识别字符 但是当进入这个过程时 我不明白如何训练图像数据以与 libsvm 一起使用 最近为了学习它 我做了一个测试现有数据 我也创建了32x32基于训练图像数据 将每个像素转换为0
  • C++:如何创建一个接受连接字符串作为参数的函数?

    我可以以某种方式设计我的日志记录功能 使其接受使用 C 的以下形式的串联字符串吗 int i 1 customLoggFunction My Integer i lt lt i lt lt customLoggFunction std co
  • SSIS 中的 UPSERT

    我正在编写一个在 SQL Server 2008 上运行的 SSIS 包 如何在 SSIS 中执行 UPSERT IF KEY NOT EXISTS INSERT ELSE IF DATA CHANGED UPDATE ENDIF ENDI
  • 如何使用 JavaBeans 集合数据集填充图表数据?

    我已经创建了一个工作 jrxml 报告 其中显示了一个由集合的数据集填充的表 List 的 Java bean 现在我想使用相同的数据集来创建图表 初学者的基本条形图 每个 bean 包含 4 个我想在条形图上显示的值 月份 正常时间 旅行
  • `all: unset` 和 `all: revert' 有什么区别

    根据 MDN 在许多情况下 revert 关键字的工作方式与 unset 完全相同 这 唯一的区别是具有由浏览器设置值的属性 或由用户创建的自定义样式表 在浏览器端设置 我不明白浏览器和自定义样式表 浏览器和自定义样式表都可以替换为all
  • Docker-Compose持久数据MySQL

    如果我运行 我似乎无法让 MySQL 数据持久化 docker compose down与以下 yml version 2 services other services data container name flask data ima
  • (如何)我可以计算枚举中的项目吗?

    当我有类似的事情时 我想到了这个问题 enum Folders FA FB FC 并想为每个文件夹创建一个容器数组 ContainerClass m containers 3 m containers FA etc 使用地图会更优雅 std
  • WebDriver Selenium API:当 Element 明显存在时,出现 ElementNotFoundErrorException!

    有时 在关闭 Javascript 的情况下在 WebDriver 上运行测试时 WebDriver 在找到某个元素并尝试单击它时会因 ElementNotFound 错误而崩溃 然而 这个元素显然是存在的 读完这篇文章后 http cod
  • 制作使用项目字段作为键的查找表的惯用方法是什么?

    我有一个收藏Foo struct Foo k String v String 我想要一个HashMap哪个有钥匙 foo k和价值foo 显然 不重新设计是不可能的Foo通过介绍Rc或克隆 复制k fn t1 let foo Foo k k
  • 迁移期间 Laravel 未配置数据库

    这可能是重复的问题 但我对以前的答案没有运气 I just git clone一个 Laravel 项目 现在我尝试做php artisan migrate 它返回以下错误 InvalidArgumentException Database
  • .NET 中的引用是如何定位的?

    NET 使用什么过程在运行时定位引用的程序集 它与在编译期间定位引用的程序集的过程是否不同 我对搜索的位置及其搜索顺序以及可能影响结果的任何参数 配置设置特别感兴趣 NET 应用程序中可以进行三种类型的引用 此答案仅涵盖下面列表中的前两个
  • POSIX pthread 编程

    我必须编写一个多线程 比如 2 个线程 程序 其中每个线程执行不同的任务 此外 这些线程一旦启动就必须在后台无限运行 这是我所做的 如果方法好或者您发现一些问题 有人可以给我一些反馈吗 另外 我想知道如何在使用 Ctrl C 终止执行后以系
  • C# FileSystemWatcher.Deleted 不触发“正常”删除?

    Code FileSystemWatcher fileSystemWatcher new FileSystemWatcher path exe fileSystemWatcher IncludeSubdirectories true fil
  • Asp.Net WebApi2 启用 CORS 不适用于 AspNet.WebApi.Cors 5.2.3

    我尝试按照以下步骤操作http enable cors org server aspnet html让我的 RESTful API 使用 ASP NET WebAPI2 实现 处理跨源请求 启用 CORS 除非我修改 web config
  • java - 分割字符串后,数组中的第一个元素是什么?

    我试图将一个字符串拆分为单个字母的数组 这就是我所做的 String str abcddadfad System out println str length output 10 String strArr str split System
  • NSCachedURLResponse 返回对象,但 UIWebView 不解释内容

    我正在向 UIWebView 发送请求 加载的网页上有 AJAX 调用 我需要分析 AJAX 流量以确定用户是否登录 为此 我在 AppDelegate 中安装了 NSURLCache MYURLCache cache MYURLCache