gpt4 book ai didi

iphone - 将自定义 NSURLProtocol 与 UIWebView 和 POST 请求一起使用

转载 作者:技术小花猫 更新时间:2023-10-29 11:03:38 25 4
gpt4 key购买 nike

在我的 iOS 应用程序中,我使用了 UIWebView 和自定义协议(protocol)(使用我自己的 NSURLProtocol 实现)。我一直非常小心地确保每当我加载一个 url 时,我都会将这样的东西加载到我的 UIWebView 中:

我的协议(protocol)://我的服务器/我的路径

在我的 NSURLProtocol 实现中,我获取了 NSURLRequest 的可变副本,将 URL 转换为 http: 并将其发送到我的服务器。

一切都适用于 HTTP GET 请求。我遇到的问题是 POST 请求。如果请求使用我的自定义协议(protocol),UIWebView 似乎没有正确编码 HTTPBody 中的表单数据。

一个解决方法,因为我对我的服务器请求使用 HTTPS,我注册我的协议(protocol)处理程序来拦截 http: 而不是 myprotocol: 并且我可以将所有调用转换为 https: 另一个问题,here ,向我指出了该解决方案:

但我想知道是否有任何替代和/或更好的方法来完成我想要的。

最佳答案

与其尝试使用 POST 请求,一种解决方法是继续对 myprotocol:// URL 使用 GET 请求,但将它们在您的 NSURLProtocol 实现中转换为http:// 使用请求查询字符串作为 POST 正文向您的服务器发送 POST 请求。

使用 GET 请求发送大量数据的担忧在于,在请求链的某个位置,请求行可能会被截断。然而,对于本地实现的协议(protocol),这似乎不是问题。

我编写了一个简短的 Cordova 测试应用程序进行实验,我发现我能够毫无问题地发送超过 1 MiB 的数据到 HTTP 请求回显服务 http://http-echo.jgate.de/

这是我的startLoading 实现:

- (void)startLoading {
NSURL *url = [[self request] URL];
NSString *query = [url query];
// Create a copy of `url` without the query string.
url = [[[NSURL alloc] initWithScheme:@"http" host:@"http-echo.jgate.de" path:[url path]] autorelease];
NSMutableURLRequest *newRequest = [NSMutableURLRequest requestWithURL:url];
[newRequest setHTTPMethod:@"POST"];
[newRequest setAllHTTPHeaderFields:[[self request] allHTTPHeaderFields]];
[newRequest addValue:@"close" forHTTPHeaderField:@"Connection"];
[newRequest addValue:@"application/x-www-form-urlencoded;charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
[newRequest setHTTPBody:[query dataUsingEncoding:NSUTF8StringEncoding]];
urlConnection = [[NSURLConnection alloc] initWithRequest:newRequest delegate:self];
if (urlConnection) {
receivedData = [[NSMutableData data] retain];
}
}

然后我实现了 NSURLConnection 协议(protocol)方法以转发到适当的 NSURLProtocolClient 方法,但是在 Transfer-Encoding:chunked 的情况下构建响应数据(来自 http://http-echo.jgate.de/ 的响应也是如此)。

关于iphone - 将自定义 NSURLProtocol 与 UIWebView 和 POST 请求一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9301611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com