問題タブ [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 に答える
277 参照

objective-c - NSURLProtocol 経由で私の http リクエストに prxoy サーバーを追加する方法は?

アプリのすべての http および https リクエストをプロキシ サーバー経由でプロキシする必要があります。

ほとんどのリクエストはサードパーティのライブラリを介して行われるため、URL を変更することはできません。

私はいくつかのコードを試しました: iOS any body know how to add a proxy to NSURLRequest? しかし、それは機能していないように見えるか、不完全です。

誰かが私に良い例を教えてもらえますか?

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

objective-c - NSURLProtocol が完全な NSURLRequest を取得しない

問題: NSURLProtocol のサブクラスがありますが、NSURLRequest返された+canonicalRequestForRequest:または返された要求-connection:willSendRequest:redirectResponse:が URL プロトコル インスタンスに渡されません。

詳細: のサブクラスでリクエストに HTTP ヘッダーを追加するNSURLProtocolメソッドを実装し+canonicalRequestForRequest:ヘッダーは正常に追加されましたが-startLoading、URL プロトコルで呼び出されself.request、そのヘッダーが含まれていません。

さらに、connection:willSendRequest:redirectResponse:のデリゲートで が呼び出された場合NSURLConnection、そのメソッドによって返された要求が何であれ、URL プロトコル インスタンスにも到達しません。

initWithRequest:cachedResponse:client:問題は、呼び出される前+canonicalRequestForRequest:または呼び出されることにあると思います。これらの 2 つのメソッドからの結果のリクエストは、 /connection:willSendRequest:redirectResponse:になった後に URL プロトコル インスタンスに渡されません。allocinit

これは Apple の URL 読み込みシステムのバグですか? 回避策はありますか? 私は何か間違ったことをしていますか?


2014 年 4 月 6 日の更新

ここにいくつかのサンプルコードがあります。2 つのヘッダーを設定しました。1 つは-[APViewController connection:willSendRequest:redirectResponse:]呼び出されX-WillSendRequestTest、もう 1 つは+[APURLProtocol canonicalRequestForRequest:]. どちらもwithinNSURLRequestを呼び出してフェッチされません。self.request-[APURLProtocol startLoading]

APViewController.m (NSURLProtocol のデリゲート)

APURLProtocol.m

NSURLRequest+test.m (NSURLRequestの記述を拡張するカテゴリ)

警告: 自宅でこれを行わないでください。カテゴリを使用してメソッドまたはプロパティをオーバーライドしないでください。これは、迅速なデバッグのみを目的としています。

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

ios - NSURLプロトコルと相対パス

WebView のターゲットとして Web サイトの静的圧縮バージョンを使用できるようにするカスタム NSURLProtocol を実装しました。外出先で zip を開き、必要なデータをロードします。しかし、問題は、NSURLProtocol が相対パスで適切に動作しないように見えることです。つまり、私は次の構造を持っています:

: を使用して css から sprite.png を呼び出しますbackground: url(../images/sprite.png) no-repeat;..の部分を切り替えれば問題assetsなく動作しますが、これを行う必要はありません。

ここで同じ問題を見つけました: NSURLProtocol サブクラスを介して相対パスからリソースをロードしていますが、これには答えがありませんでした。

リクエストが相対パスを適切に解決するようにこの問題を修正する方法を見つけることができませんでした。

事前に感謝します。

補足: @import url("style.css");main.css で使用した同じ問題

編集 :

まず、リモート サーバーから zip ファイルをダウンロードします。

だから、 からhttp://host/foo/archive.zipに保存しdocumentsDirectory/archive.zipます。そこから、zip ファイルを指すようにスキームと URL を変更します。

myzip://archive.zip を開きます。zip ファイルにそのようなファイルが見つからない場合は、現在のパスに /index.html を追加します。NSURLProtocolしたがって、次のリクエストがサブクラスに到着します- (id)initWithRequest:(NSURLRequest *)request cachedResponse:(NSCachedURLResponse *)cachedResponse client:(id < NSURLProtocolClient >)client。 

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

ios - NSURLCache を使用して、NSURLProtocol によって提供されるコンテンツをキャッシュする方法

NSURLProtocolURL からローカル パスへのマッピングに対してアウトバウンドhttpリクエストをチェックplistし、代わりにローカル コンテンツを提供してから、NSURLCache:

ローカルデータの取得回数を 1 回に制限しています。最初にフェッチされたときは から取得されますがNSBundle、その後はストックを使用して、キャッシュまたはネットワークNSURLCacheから取得する必要があるかどうかを確認します。

残念ながら、ローカル データはキャッシュに保存されるように見えますが、元に戻ることはありません。ログのスニペットは次のとおりです。

私の予想では、プロトコルによって最初に拒否された後、キャッシュ ヒットが数回発生しますが、代わりに常にミスとしてカウントされ、サーバーからコンテンツがフェッチされ、その後キャッシュ ヒットが開始されます。

私が恐れているのは、NSURLProtocolサブクラスが応答をキャッシュできるように構築することですが、キャッシュから引き出されることはありません。何か案は?

前もって感謝します。:)

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

ios - UIWebView + NSUrlConnection - LinkedIn が無限ループに陥る

WebViewロギングの目的ですべての URL リクエストを傍受するために、iOS でアプリを作成しようとしています。

このために、このチュートリアルに従って、NSUrlProtocolリクエストを拡張してロードするクラスを作成しました。NSUrlConnection

http://www.raywenderlich.com/59982/nsurlprotocol-tutorial

Gmail はこれで問題なく動作します。しかし、ユーザー ID とパスワードを入力すると、LinkedIn が無限ループ (連続する 302 要求) に陥ります。

中間 Web デバッグ プロキシを使用して、この無限ループを確認しました。

この無限ループは、チュートリアルの最初の部分で言及したものとは異なることに注意してください。チュートリアルで言及したのと同じ方法で対処しました。

NSUrlProtocol派生クラスを登録しない場合、リンクは正常に機能します。

どんな助けでも大歓迎です。さらに情報/コードなどが必要な場合はお知らせください。