問題タブ [nsurlprotocol]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - カスタム NSURLProtocol で AVURLAsset を使用する
名前に基づいて NSDictionary から格納された NSData アイテムをフェッチできるカスタム NSURLProtocol (「memory:」と呼ばれる) を作成しました。たとえば、次のコードは NSURLProtocol クラスを登録し、いくつかのデータを追加します。
これにより、"memory://video" のような URL を介して NSData を参照できます。
以下は、私のカスタム NSURLProtocol 実装です。
このコードが機能するかどうかはわかりませんが、問題はありません。カスタム プロトコルを登録しているにもかかわらず、次のコードで URL を使用しようとすると、 canInitWithRequest: が呼び出されることはありません。
「memory://video」を使用すると画像は常に nil ですが、「file:///...」を使用すると正常に動作します。私は何が欠けていますか?canInitWithRequest が呼び出されないのはなぜですか? AVFoundation は特定の URL プロトコルのみをサポートし、カスタム プロトコルはサポートしませんか?
ありがとう
ios - NSURLRequest を UIWebView と関連付ける
iOS では、ナビゲーション リクエスト、画像、スタイルシート リクエストのNSURLRequest
いずれで あっても、それを送信したと関連付けることができるようにしたいと考えています。これは、サブクラスの実装を要求して、リクエストを取得して分析する必要があるようです。ただし、リクエストをその Web ビューと関連付ける方法を見つけることができず、 sのみを理解しているようです。NSURLRequest
UIWebView
NSURLProtocol
NSURLProtocol
NSURLRequest
UIWebViewDelegate
. _ UIWebViewDelegate
ただし、これは、メソッドをトリガーしないイメージなどのセカンダリ リソース リクエストでは機能しません。
この関連付けを行う最善の方法について考えている人はいますか?
ios - NSMutableURLRequest をディープコピーするにはどうすればよいですか?
NSMutableURLRequestに関する Apple の iOS ドキュメントには、次のように書かれています。
NSURLConnection は、その初期化子の 1 つに渡された各 NSMutableURLRequest オブジェクトのディープ コピーを作成します。
これはどのように実装されていますか?NSMutableURLRequest
オブジェクトのディープ コピーを実行する文書化された方法は見当たりません。NSMutableURLRequest
サブクラス化できるため、フィールドごとのコピーは十分ではありません。
私の使用例: NSURLProtocol
http の上に構築されたカスタム プロトコルを実装しています。私のNSURLProtocol
実装では、カスタム処理をNSURLConnection
行ってから、わずかに変更された を使用しNSURLRequest
ます。
cocoa - NSURLがローカルディレクトリを指すようにする方法は?
今日Adiumコードを読んで、NSURLの興味深い使用法を見つけました:
URL をログに記録しようとしたところ、このadium://im.adium.Smooth Operator.style/adiumが取得されました。その後、空のプロジェクトを作成して、そのような NSURL を作成する方法を確認しましたが、失敗しました。プロジェクトの webview のフレームに loadHTMLString メッセージを送信すると、baseURL が nil の場合は問題なく、そうでない場合はビューに空白のページが表示されます。
これが私のコードです。プロジェクト名はwebkitです
問題は、http:// の代わりに自己定義プロトコルを作成する方法です。
ios - iOS: UIWebView を使用した HTTP 基本/ダイジェスト認証
概要
ビュー コントローラーを表示する iOS アプリ用の SAML ログイン (openID に似たシングル サインオン) ソリューションに取り組んでおり、UIWebView
HTTP 基本/ダイジェストを処理するときにタイミングやタイムアウトの問題が発生しています。の認証UIWebView
。
具体的には、クライアントが HTTP 認証チャレンジを取得するとUIAlertView
、ユーザーにユーザー ID とパスワードを求めるプロンプトを表示します。ユーザーがすばやく (10 秒未満で) 情報を入力できる場合、それは機能します。ただし、エントリに 10 秒以上かかると、接続が終了したように見え、何も起こりません。
質問
connection:didReceiveAuthenticationChallenge:
ユーザーにユーザー ID とパスワードの入力を求める (そしてユーザー入力を待たなければならない) のを防ぐ呼び出しのタイムアウトはありますか? 誰かに回避策がありますか (たとえば、接続タイムアウトを延長する方法)?UIWebView
のサブクラスよりもHTTP 基本/ダイジェスト認証を処理するためのより良い方法はありNSURLProtocol
ますか?
詳細とコード
処理する必要があるほとんどの SAML システムでは、ログインは通常の Web ページとしてUIWebView
. ただし、処理が必要なシステムの一部は、モバイル ブラウザー用の HTTP 基本認証または HTTP ダイジェスト認証の使用にフォールバックするため、それも処理できる必要があります。
大きな課題は、UIWebView が下にあるネットワーク呼び出しを公開しないという事実から始まります。必要なものを取得するために、NSURLProtocol
必要に応じてサブクラスを作成して登録しました。
これにより、HTTP 基本/認証チャレンジが発行されたときにこのメソッドSMURLProtocol
が呼び出されるので、HTTP 基本認証とダイジェスト認証を処理できる YES を返します。
これで、SMURLProtocol が認証チャレンジを処理できることをネットワーク スタックに伝えたので、
ご覧のとおり、UIAlertView を起動して、ユーザーにユーザー ID とパスワードの入力を求めています。ネットワーク コードがバックグラウンド スレッドで実行されているため (どうやら、確かなことはわかりません)、メイン スレッドでそれを行う必要があります。セマフォと明示的な Grand Central Dispatch コードを追加して、時折発生していたクラッシュを回避しました (このスレッドに基づく)。
最後の部分は、ユーザー ID とパスワードを受け入れる UIAlertView デリゲートであり、チャレンジの資格情報を作成します。
概要で述べたように、ユーザーがユーザー ID とパスワードを約 10 秒以内に入力できる場合、これはすべてうまく機能します。それよりも時間がかかる場合、接続がタイムアウトしたように見え、認証情報をチャレンジの送信者に渡しても効果がありません。
ios - NSURLProtocolでAJAX呼び出しをモックする方法は?
外部サービスへのAJAX呼び出しを行うUIWebviewがあります。オフラインの場合、これらのリクエストをキャッチしてローカルのjsonを返す必要があります。
NSURLProtocolを実装し、AJAXリクエストをキャッチできました。問題は、jqueryが常に0エラーコードを返すことです。
});
私はいつもrequest.status=0を受け取ります
プロトコルをテストするために、HTML内の画像をモックしようとしましたが、うまく機能します。
- google.frからの画像へのHTMLリクエスト=>正常に機能します
- AmazonのjsonへのAJAX呼び出し=>失敗
これが私の完全な実装です:
ios - MPMovieController または AVFoundation を使用して、NSURLProtocol のサブクラスを使用してビデオを再生できますか?
現在、カスタム NSURLProtocol サブクラスで定義されたカスタム スキームを持つ URL でビデオを再生しようとしています。最初はこれを達成するために MPMoviePlayerController を使用していましたが、問題が発生してスタック オーバーフローを確認した後、MPMoviePlayerController が NSURLProtocol サブクラスを期待どおりに処理しないことがわかりました。
カスタム NSURLProtocol を使用して URL でムービーを再生するには?
その結果、AVFoundation フレームワークを調べることにしましたが、これも機能していないようです。これが可能かどうか知りたかっただけですか、それとも壁を通り抜けようとしているのですか?
AVFoundation を使用して、私が使用しているアプローチを以下に示します。これは、インターネット上でホストされているビデオへの標準 URL を使用する場合には機能しますが、カスタム NSURLProtocol では機能しないことに注意してください。
定義された NSURLProtocol サブクラスから再生するために行う必要がある別のことはありますか?
ios - CFNetwork 内部エラー
キャッシュシステムを使用して独自の NSURLProtocol を作成していますが、コンソールに次のように表示されます。
4676: CFNetwork 内部エラー (0xc01a:/SourceCache/CFNetwork_Sim/CFNetwork-609.1.4/Connection/URLConnectionClient.cpp:558
これの原因は何ですか?
これが表示される現在の時点で、トラフィックが正しく処理されていないという兆候はありません。応答はキャッシュされ、サーバーは変更されていない 304 を返し、キャッシュされた応答をロードし、別のスレッドがそのエラーをログに記録します。
ios - 外部コードからカスタム NSURLProtocol にアクセスできますか?
私のアプリは、1 つの特定の URL をインターセプトする NSURLProtocol サブクラスを登録します。プロトコルは、秘密鍵を使用して要求に応答します。
私のコードと私がリンクしているライブラリだけがキーを見ることができるはずです。進取の気性に富んだユーザーは、どのようにして私の秘密鍵を取得する可能性がありますか? これは安全ですか?
興味のある方のために説明すると、これは DRM セットアップの一部です。AVPlayer は、暗号化されたメディアを再生できるようにキーを要求します。