問題タブ [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.
objective-c - NSURLProtocol 経由で私の http リクエストに prxoy サーバーを追加する方法は?
アプリのすべての http および https リクエストをプロキシ サーバー経由でプロキシする必要があります。
ほとんどのリクエストはサードパーティのライブラリを介して行われるため、URL を変更することはできません。
私はいくつかのコードを試しました: iOS any body know how to add a proxy to NSURLRequest? しかし、それは機能していないように見えるか、不完全です。
誰かが私に良い例を教えてもらえますか?
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 プロトコル インスタンスに渡されません。alloc
init
これは 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の記述を拡張するカテゴリ)
警告: 自宅でこれを行わないでください。カテゴリを使用してメソッドまたはプロパティをオーバーライドしないでください。これは、迅速なデバッグのみを目的としています。
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
。
ios - NSURLCache を使用して、NSURLProtocol によって提供されるコンテンツをキャッシュする方法
NSURLProtocol
URL からローカル パスへのマッピングに対してアウトバウンドhttp
リクエストをチェックplist
し、代わりにローカル コンテンツを提供してから、NSURLCache:
ローカルデータの取得回数を 1 回に制限しています。最初にフェッチされたときは から取得されますがNSBundle
、その後はストックを使用して、キャッシュまたはネットワークNSURLCache
から取得する必要があるかどうかを確認します。
残念ながら、ローカル データはキャッシュに保存されるように見えますが、元に戻ることはありません。ログのスニペットは次のとおりです。
私の予想では、プロトコルによって最初に拒否された後、キャッシュ ヒットが数回発生しますが、代わりに常にミスとしてカウントされ、サーバーからコンテンツがフェッチされ、その後キャッシュ ヒットが開始されます。
私が恐れているのは、NSURLProtocol
サブクラスが応答をキャッシュできるように構築することですが、キャッシュから引き出されることはありません。何か案は?
前もって感謝します。:)
ios - UIWebView + NSUrlConnection - LinkedIn が無限ループに陥る
WebView
ロギングの目的ですべての URL リクエストを傍受するために、iOS でアプリを作成しようとしています。
このために、このチュートリアルに従って、NSUrlProtocol
リクエストを拡張してロードするクラスを作成しました。NSUrlConnection
http://www.raywenderlich.com/59982/nsurlprotocol-tutorial
Gmail はこれで問題なく動作します。しかし、ユーザー ID とパスワードを入力すると、LinkedIn が無限ループ (連続する 302 要求) に陥ります。
中間 Web デバッグ プロキシを使用して、この無限ループを確認しました。
この無限ループは、チュートリアルの最初の部分で言及したものとは異なることに注意してください。チュートリアルで言及したのと同じ方法で対処しました。
NSUrlProtocol
派生クラスを登録しない場合、リンクは正常に機能します。
どんな助けでも大歓迎です。さらに情報/コードなどが必要な場合はお知らせください。