問題タブ [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.

0 投票する
1 に答える
3444 参照

swift - カスタム構成で NSURLSession で NSURLProtocol を使用する方法はありますか?

バックグラウンド キューで実行される NSURLSession があります。NSURLProtocolサブクラスをに追加していますNSURLsessionConfiguration.protocolClasesが、override class func canInitWithRequest(request: NSURLRequest) -> Bool決して呼び出されません。

これが私が追加する方法ですNSURLProtocol

また、バックグラウンドで実行されていないセッションで試してみましたが、機能しませんでした:

これがうまくいかなかったので、私は試しました:

そして、これを私のAppDelegateで呼び出します

これは機能しますが、何が間違っていますか?!

0 投票する
4 に答える
24224 参照

javascript - WKWebview でリクエストを監視するにはどうすればよいですか?

WKWebview でリクエストを監視するにはどうすればよいですか?

NSURLprotocol (canInitWithRequest) を使用してみましたが、ajax リクエスト (XHR) は監視されず、ナビゲーション リクエスト (ドキュメント リクエスト) のみが監視されます。

0 投票する
0 に答える
472 参照

objective-c - プロキシ サーバーの永続的な接続を閉じています

OSX アプリのプロキシ サポートを実装しています。

カスタムを作成しましたが、NSURLProtocol認証なしのプロキシで完全に機能しています。ローカル ネットワークの Windows コンピューターで CCProxy と FreeProxy の両方を試しました。

ただし、プロキシ認証がオンの場合、最初の数秒間のリクエストはすべて完全に機能し、接続は 5 秒で ESTABLISHED から CLOSE_WAIT になります。プロキシは再び 0 接続を示し、その後、プロキシ認証ヘッダーが事前に設定されていても、アプリで HTTP リクエストが 407 を取得します。

私のコードは次のようになります:

ご覧のとおり、以前の接続を静的な入力ストリームに保存し、新しい接続を開いた後にのみ解放しようとしましたが、役に立たないようです。

また、 NSStream TCP Keep-alive iOSkCFStreamEventOpenCompletedで提案されているように、基になるソケットをキープアライブに設定しようとしましたが、まだ成功していません。

接続が閉じるのはなぜですか? どうすればデバッグしたり、機能させたりできますか? 接続の障害はプロキシが異常になりますか?

ありがとう。

編集1ワイヤーシャーク

編集 2 : HTTPS に関係しているようです... サーバーを https ではなくプレーンな http に変更すると、完全に機能します。

0 投票する
1 に答える
621 参照

ios - AJAX での NSURL プロトコルのタイムアウト

NSURLProtocol を使用して、UIWebview から送信されるすべてのリクエストにカスタム ヘッダーを追加します。この WebView では、特定の操作を行う際に AJAX 呼び出しが起動され、メッセージが表示されます。メッセージを表示するこの操作は AJAX を使用し、NSURLProtocol メソッドを使用すると常にタイムアウトします。NSURLProtocol がなくても正常に動作します。

さらに情報が必要な場合はお知らせください。ここに私のコードがあります。

0 投票する
1 に答える
741 参照

ios - カスタム NSURLProtocol を configuration.protocolClasses に追加すると、デフォルトの URL プロトコルの動作が妨げられます

他のすべての通話に通常のインターネット接続を提供しながら、一部の通話にテスト データを提供するためにカスタムNSURLProtocolをに追加しようとしています。セッションはプロジェクトに含まれるライブラリに存在するため、セッション構成のにNSURLSessionを追加してこれを行う必要があります。NSURLProtocolprotocolClasses

trueなんらかの理由で、カスタム プロトコルが呼び出しを返すことによって要求を受け取ったとき、私のセットアップはテスト データを配信しますが、canInitWithRequest他のすべての要求 (それが返されたとき) では、まだカスタム プロトコルの背後にfalseあるデフォルト プロトコルが要求を取得し、呼び出しに戻るprotocolClassesことさえありますが、要求をインターネットに送信することはなく、代わりに 30 秒後に要求タイムアウトを配信します。からカスタム プロトコルを削除すると、すべて正常に動作します。もちろん、テスト データだけが提供されなくなります。truecanInitWithRequestprotocolClasses

これは、プロトコルのインストールに使用するコードです。

カスタム プロトコルを に登録すると[NSURLProtocol registerClass:[MyProtocol class]]、フォールスルーは機能しますが、記載されているように、プロジェクトでこのアプローチを使用することはできません。

これが正しく機能しない理由について何か考えはありますか?

0 投票する
1 に答える
713 参照

ios - NSURLProtocol + UIWebView + 特定のドメイン = アプリの UI がフリーズ

iOS 用のブラウザを作成しています。NSURLProtocol独自のキャッシング スキームを実装し、ユーザー エージェント スプーフィングを実行するために、カスタム サブクラスを使用して実験することにしました。それは両方とも非常にうまく機能します...問題は、特定のサイト (msn.com が最悪) に移動すると、アプリ全体のUI が最大 15 秒間フリーズすることです。明らかに何かがメイン スレッドをブロックしていますが、それは私たちのコードにはありません。

UIWebViewこの問題は、 とカスタム プロトコルの組み合わせでのみ発生します。WKWebView(さまざまな理由で使用できない)を交換すると、問題はなくなります。同様に、プロトコルが使用されないように登録しなければ、問題は解決します。

また、プロトコルがをするかはあまり重要ではないようです。応答を転送するだけの最低限のダミー プロトコルを作成しました (投稿の下部)。そのプロトコルを、他のコードを一切持たない必要最小限のテスト ブラウザに落とし込みましたが、結果は同じでした。また、他の誰かの ( RNCachingURLProtocol) を使用してみましたが、同じ結果が観察されました。これら 2 つのコンポーネントを特定のページと単純に組み合わせると、フリーズが発生するようです。私はこれを解決しようとする(または調査する)ことに途方に暮れており、ガイダンスやヒントをいただければ幸いです。ありがとう!

0 投票する
3 に答える
3353 参照

ios - NSURLSession で NSURLProtocol を使用する

私のアプリケーションはNSURLConnection、サーバーとの通信に使用します。通信には https を使用しています。すべてのリクエストからの認証を 1 か所で処理するためにNSURLProtocol、そのクラスのデリゲートで認証を使用して処理しました。NSURLSessionの代わりに使用することにしNSURLConnectionました。私は タスクを作成し、によって使用されて作業NSURLProtocolしようとしていますNSURLSessionNSURLProtocol

CustomHTTPSProtocol私のNSURLProtocolクラスは次のようになります

start loading が呼び出され、認証チャレンジも行われますが、その直後に stop loading が呼び出されます。

しばらくするとエラーコード-999「キャンセルされました」が返ってきます。didReceiveData は呼び出されません。

Note:NSURLProtocol and the Authentication Process worked fine with NSURLConnection.

何が欠けていますか?? 私の質問は

  1. [NSURLProtocol registerClass:[CustomHTTPSProtocol クラス]] を登録しています。NSURLConnection では問題なく動作しましたが、NSURLSession でグローバルに NSURLProtocol を登録する方法は?.

  2. URLSession を使用した NSURLProtocol (URLConnection で動作したのと同じ URL とロジック) でリクエストが失敗するのはなぜですか? また、NSURLProtocol を URLSession で動作させる方法は?.

詳細が必要な場合はお知らせください。

0 投票する
1 に答える
378 参照

ios - NSURLSessions の NSRULProtocol をグローバルに再登録する

NSURLProtocol を使用して、すべての NSURLSession 接続の認証チャレンジを処理しようとしています。使った

NSURLConnection の場合。ただし、NSURLSession では機能しないため、設定する必要がありますSessionConfiguration.protocolClasses=@[[CustomHTTPSProtocol class]];。問題は、この URLProtocol クラスを使用して認証チャレンジのみを処理し、元のクラスのデリゲートで受信データを取得することです。

このようなもの

オリジナルクラス

NSURL接続

NSURLセッション

NSURLProtocol クラス

NSURL接続

NSURLセッション

上記のロジックを使用して、すべてのリクエストの認証をグローバルに処理し、レスポンスを個別に処理することができました。しかし、NSURLProtocol を使用する場合、NSURLSession では、認証は Protocol クラスで行われますが、元のクラスのデリゲートが呼び出されないため、データを受信できません。

誰か助けて。

0 投票する
2 に答える
370 参照

ios - UIWebView/NSURLProtocol - オフライン時に到達できない外部アセットのプレースホルダー

私のアプリは、iPhone/iPad で書籍を閲覧するための電子書籍リーダーです。ユーザーは、デバイスに保存された書籍を .epub ファイル (zip コンテンツ) としてダウンロードするオプションを利用できます。これにより、オフラインで書籍を表示できるようになります。ページの内容は html です。

ただし、ビデオなどの一部のアセットは、この .epub コンテンツには含まれていません。ユーザーがそのようなページに移動すると、.ePub にない外部アセットを検出し、「このコンテンツはオフライン時は利用できません」というテキストを含む単純なプレースホルダーを表示する必要があります。

これらのビデオは、iFrame html タグまたは object タグに埋め込むことができます。

現在、NSURLProtocol 抽象クラスから継承するクラスがあり、それを使用してこの要件を処理しています。これらの 3 つのメソッドの実装があります。

私の問題は、「このコンテンツはオフラインのときは利用できません」という単純な .png があることですが、iFrame の領域が画像よりも小さい場合があるため、見苦しくなります。フィットするようにスケーリングするにはどうすればよいですか?または、より良いアプローチがありますか?コンテンツが利用できないというこのメッセージを表示できる限り、画像である必要はありません。startLoading メソッドの現在のコード:

ご提案ありがとうございます。