使用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

上一篇: Passing data to objective c with POST rather than GET

下一篇: NSURLProtocol not responding to UIWebviews