質問

URLインターセプトメソッドを使用して、URLエンコードパラメーターとしてデータを渡し、NSURLProtocolを使用してリクエストをインターセプトすることにより、JavaScriptから客観的Cにデータを渡していますが、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] anの要求データがあります 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];

または、マルチパートドキュメントまたはフォーム値を送信することもできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top