使用POST而不是GET将数据传递给目标c
我一直在使用url拦截方法通过传递数据作为URL编码参数并使用NSURLProtocol截取请求,但是我现在想要发送更大量的数据,比如说10,000个字符长的字符串,但是将此数据从javascript传递到了目标C在GET请求中看起来不太实际。 对?
有没有一种方法让目标c拦截从UIWebView发送的POST数据?
如果是这样,我仍然使用NSURLProtocol,并且如何获取POST数据?
如果没有,还有其他一些方法,我可以将大量的数据从UIWebView传递到目标c?
当使用如下代码时:
@implementation AppProtocolHandler + (void)registerSpecialProtocol { static BOOL inited = NO; if (!inited) { inited = YES; [NSURLProtocol registerClass:[AppProtocolHandler class]]; } } - (void)handleRequest { NSURLRequest *request = [self request]; // null when via app:// but works when via http:// NSLog(@"[request HTTPBody]: %@", [request HTTPBody]); } + (BOOL)canInitWithRequest:(NSURLRequest *)request { return YES; } + (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request { return request; } @end
对某些协议(例如app://
)的[request HTTPBody]
将导致[request HTTPBody]
为null
。 但是,如果你通过http://
发送[request HTTPBody]
那么[request HTTPBody]
将按照预期在NSData
对象中提供请求数据。
所以你的Javascript应该看起来像这样:
$.post("http://test/hello/world", {'data':"foo bar"});
而不是像这样:
$.post("app://test/hello/world", {'data':"foo bar"});
任何请求都将被代理拦截,因此您可以发送任何POST Ajax请求,并将其填入所需的参数和值,然后发送。 所有的值都会被拦截,你可以像现在一样使用它们。 一个简单的POST请求可以使用JQuery发送,如下所示:
$ .post(“toobjc.html”,{'data':“10K字符长字符串和更多这里...”));
更多信息:http://api.jquery.com/jQuery.post/
你一定要使用POST。 你只需要设置它的请求。 您可能需要确保数据是经过编码的,并处理其他一些细节。
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:myMimeType forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", requestData.length]
forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:requestData];
[self.playerView loadRequest: request];
或者,您可以发送多部分文档或表单值。
链接地址: http://www.djcxy.com/p/34795.html