Передача данных в объектив C с Post, а не получает
-
10-10-2019 - |
Вопрос
Я использовал метод перехвата URL для передачи данных из JavaScript к объективам C путем передачи данных в качестве кодируемых URL -параметров и использования NSURLProtocol для перехвата запроса, однако я сейчас хочу отправить большие объемы данных, например, скажем, 10 000 символов, но это Не кажется практичным в запросе GET. Верно?
Есть ли способ для цели C перехватить данные, отправленные из UIWebView?
Если да, то я все еще использую nsurlprotocol и как мне получить данные о сообщении?
Если нет, есть ли другой способ передать большие объемы данных из 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]
существование null
. Анкет Но если вы отправите через http://
тогда [request HTTPBody]
будет иметь данные запроса в NSData
объект, как и ожидалось.
Так что ваш JavaScript должен выглядеть как -то вроде:
$.post("http://test/hello/world", {'data':"foo bar"});
А также нет что-то типа:
$.post("app://test/hello/world", {'data':"foo bar"});
Другие советы
Любой запрос будет перехвачен делегатом, поэтому вы можете отправить любой запрос AJAX, наполните его параметрами и значениями, которые вы хотите, а затем отправить его. Все значения будут перехвачены, и вы можете использовать их так же, как и до сих пор. Легкий запрос на почту может быть отправлен с помощью jQuery, так же просто, как:
$ .post ("toobjc.html", {'data': "10k символов длинной строки и многое другое здесь ..."});
Подробнее здесь: http://api.jquery.com/jquery.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];
В качестве альтернативы, вы можете отправить многочасовой документ или значения формы.