1

すべての HTTP リクエストを受け取り、URL を変更するMobileSubstrate ( http://www.iphonedevwiki.net/index.php/MobileSubstrate ) アドオンを作成したいと考えています。(理由は非常に複雑で、説明するには時間がかかるので、他に方法がないことを信じてください)。基本的に、HTTP リクエストをインターセプトし、URL を変更し、リクエストを元の関数に送り返すために上書きする必要がある、最適な Objective-C メッセージまたは C 関数を知る必要があります (これは、送信された最初のリクエストだけであってはなりません)。アプリケーションによるものですが、リダイレクトも同様です)。NSURL または CFNetwork にあると思いますが、正確な場所はわかりません。この関数は、置き換えると、どのアプリや OS 自体でも動作するはずです。

編集: OK、ここに私がやりたいことの 2 つのサンプル シナリオがあります。オーバーライドするメソッドは、アプリから OS への任意の HTTP 要求によって呼び出されるものでなければならないことに注意してください:
1) aaa.com/ の MobileSafari タイプのユーザーa.html
2) aaa.com/a.html は aaa.com/b.html にリダイレクトします
3) aaa.com/b.html は bbb.com/c.png
を読み込みます リクエストを変更して、すべてが ?i= になるようにしますjが追加されました。
例: aaa.com/a.html をすべて aaa.com/a.html?i=j、aaa.com/b.html?i=j、bbb.com/c.png?i=j? に変更します。

もう 1 つ:
1) ユーザーが Maps.app を使用する
2) Google マップが google.com/map1.png をロードしようとします (実際の画像ではありません、私は知っています)
google.com/map1.png を google.com/map1.png に変更しますか? i=j?

4

1 に答える 1

1

次のメソッドをフックし、リクエストをmutableCopy編集した で置き換えます。

  • -[NSURLConnection sendWillSendRequest:redirectResponse:]
  • -[NSURLConnection initWithRequest:delegate:]
  • –[NSURLConnection initWithRequest:delegate:startImmediately:]

これは生の TCP ソケット接続をリダイレクトせず、標準 API を介して送られる HTTP リクエストのみをリダイレクトします。

注:これを行うには非常に注意してください。私の意見では、すべての http リクエストをリダイレクトすることはユーザーの信頼を侵害しています

于 2010-04-29T02:56:43.823 に答える