Question

J'utilise la méthode d'interception d'URL pour transmettre les données de javascript pour objectif C en passant les données sous forme de paramètres codés url et en utilisant NSURLProtocol pour intercepter la requête mais je suis désireux maintenant d'envoyer de grandes quantités de données, comme par exemple 10 000 caractères de long cordes, mais cela ne semble pas possible de le faire dans une requête GET. Droit?

Y at-il un moyen pour c objectif d'intercepter les données POST envoyées à partir d'un UIWebView?
Si oui dois-je utiliser encore NSURLProtocol et comment puis-je obtenir les données POST
Dans le cas contraire est-il une autre façon, je peux passer de plus grandes quantités de données du UIWebView à c objectif?

Était-ce utile?

La solution

Lors de l'utilisation du code comme:

@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

Demandes de certains protocoles (par exemple app://) se traduira par [request HTTPBody] étant null. Mais si vous envoyez par http:// alors le [request HTTPBody] aura les données de demande dans un objet NSData comme prévu.

Donc, votre Javascript devrait ressembler à:

$.post("http://test/hello/world", {'data':"foo bar"});

pas quelque chose comme:

$.post("app://test/hello/world", {'data':"foo bar"});

Autres conseils

Toute demande sera intercepté par le délégué afin de pouvoir envoyer une requête POST Ajax, farcir avec les paramètres et les valeurs que vous souhaitez, puis envoyez-le. Toutes les valeurs seront interceptées et vous pouvez les utiliser de la même façon que vous faites à ce jour. Une requête POST facile pourrait être envoyée en utilisant JQuery, aussi facile que:

$ après ( "toobjc.html", { 'data': "10k caractères string et plus ici ..."});.

Plus d'informations ici: http://api.jquery.com/jQuery.post/

Vous devriez certainement utiliser un POST. Vous avez juste besoin de mettre en place la demande pour elle. Vous devrez peut-être faire en sorte que les données sont codées et de prendre soin d'un couple d'autres détails.

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];

Vous pouvez envoyer un document en plusieurs parties ou VALUES.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top