3

私はURLインターセプトメソッドを使用してデータをJavaScriptからObjectiveCに渡し、データをURLエンコードされたパラメーターとして渡し、NSURLProtocolを使用してリクエストをインターセプトしていましたが、10,000文字の長さの文字列など、大量のデータを送信したいと考えていますが、これはGETリクエストで行うのは実用的ではないようです。右?

Objective cがUIWebViewから送信されたPOSTデータを傍受する方法はありますか?
その場合でもNSURLProtocolを使用し、POSTデータを取得するにはどうすればよいですか?
そうでない場合は、UIWebViewからObjective Cに大量のデータを渡すことができる他の方法はありますか?

4

3 に答える 3

5

次のようなコードを使用する場合:

@implementation AppProtocolHandler

+ (無効)registerSpecialProtocol {
    static BOOL inited = NO;

    if (!inited) {
        開始された = はい;
        [NSURLProtocol registerClass:[AppProtocolHandler クラス]];
    }
}

- (ボイド)ハンドルリクエスト {
    NSURLRequest *request = [自己リクエスト];

    // app:// 経由の場合は null ですが、http:// 経由の場合は機能します
    NSLog(@"[リクエスト HTTPBody]: %@", [リクエスト HTTPBody]);
}

+ (BOOL)canInitWithRequest:(NSURLRequest *)リクエスト {
    はいを返します。
}

+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)リクエスト {
    返品リクエスト;
}

@終わり

一部のプロトコル (例: 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"});
于 2010-10-24T20:59:04.510 に答える
1

すべてのリクエストはデリゲートによってインターセプトされるため、POST Ajax リクエストを送信し、必要なパラメーターと値を詰めて送信できます。すべての値が傍受され、これまでと同じように使用できます。簡単な POST リクエストは、次のように簡単に JQuery を使用して送信できます。

$.post("toobjc.html", { 'data':"10,000 文字の長さの文字列とその他の文字列 ..." });

詳細はこちら: http://api.jquery.com/jQuery.post/

于 2010-10-21T23:48:20.947 に答える
0

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

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

于 2010-10-21T20:13:38.013 に答える