Domanda

Sono stato con il metodo URL intercetta per passare i dati da javascript per obiettivo C passando i dati come parametri URL codificato e utilizzando NSURLProtocol per intercettare la richiesta però ora sto voglia di trasmettere grandi quantità di dati, come ad esempio lungo 10.000 carattere stringhe, ma questo non sembra pratico per fare una richiesta GET. Giusto?

C'è un modo per c obiettivo di intercettare dati POST inviato da un?
UIWebView Se così posso ancora utilizzare NSURLProtocol e come faccio a ottenere i dati POST?
Se non c'è un altro modo posso passare grandi quantità di dati dal UIWebView a Objective C?

È stato utile?

Soluzione

Quando si utilizza un codice simile:

@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

Richieste ad alcuni protocolli (ad esempio app://) provocherà [request HTTPBody] essere null. Ma se si invia attraverso http:// poi il [request HTTPBody] avrà i dati di richiesta in un oggetto NSData come previsto.

Quindi la tua JavaScript dovrebbe essere simile a:

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

e non qualcosa di simile:

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

Altri suggerimenti

Ogni richiesta verrà intercettato dal delegato in modo da poter inviare alcuna richiesta POST Ajax, roba con i parametri ei valori che si desidera e quindi inviarlo. Tutti i valori saranno intercettati ed è possibile utilizzare nello stesso modo si sta facendo finora. Una richiesta POST facile potrebbe essere inviato utilizzando jQuery, facile come:

.

$ postale ( "toobjc.html", { 'Dati': "10k caratteri di stringa e di più qui ..."});

Maggiori informazioni qui: http://api.jquery.com/jQuery.post/

Si dovrebbe utilizzare un POST. Hai solo bisogno di impostare la richiesta di esso. Potrebbe essere necessario fare in modo che i dati sono codificati e prendersi cura di un altro paio di dettagli:.

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

In alternativa, è possibile inviare un multi-part valori di documenti o forma.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top