2017-12-08 19 views
0

リダイレクトに従うようにNSURLSessionをセットアップしました。デリゲートはリダイレクトをキャッチし、dataTaskWithRequestを使用してNSURLSessionDataTaskを作成し、その引数としてwillPerformHTTPRedirectionのリダイレクトを作成します。これは、(以下ログを参照)、この奇妙なことをしてルータを除いて、私のネットワーク上のすべてのために素晴らしい作品:NSURLSessionリダイレクトエラー

- [NSURLSession] willPerformHTTPRedirection: <NSURLRequest: 0x60000000d500> { URL: http://192.168.1.1:80:8000/, Method GET, Headers { 
Accept =  (
    "*/*" 
); 
"Accept-Encoding" =  (
    "gzip, deflate" 
); 
"Accept-Language" =  (
    "en-us" 
); 
} } 
- [NSURLSession] willPerformHTTPRedirection: <NSURLRequest: 0x60000000d540> { URL: http://192.168.1.1:80:8000:8000/, Method GET, Headers { 
Accept =  (
    "*/*" 
); 
"Accept-Encoding" =  (
    "gzip, deflate" 
); 
"Accept-Language" =  (
    "en-us" 
); 
} } 
-[NSURLSession] willPerformHTTPRedirection: <NSURLRequest: 0x60000000d6b0> { URL: http://192.168.1.1:80:8000:8000:8000/, Method GET, Headers { 
Accept =  (
    "*/*" 
); 
"Accept-Encoding" =  (
    "gzip, deflate" 
); 
"Accept-Language" =  (
    "en-us" 
); 
} } 

は、基本的にはアドレスの最後にリダイレクトポートを追加し続けています。なぜこれをやっているのか分かりません。他のすべてのアドレス(30人以上)は、期待どおりに動作し、最後までのすべてのリダイレクトに従います。私は最大10のリダイレクトを設定しようとしていますが、これは起こってはいけません。誰でもこれを引き起こす可能性のあることは考えていますか?

ここにcurlの結果があります。 ... 1.115はうまく動作しますが、1.1は動作しません。カールの結果によると、私が気づく主な違いは、115上のLocationがポートをドロップし、その後にリダイレクトを追加し、1.1がポートを変更することです。私は... 1.1に接続しようとしましたが、ポートやリダイレクトは正しく機能しませんでしたが、残念ながら私のコードではポートが文字列の一部である必要があります。

Results from curl

enter image description here

enter image description here

Error: Error Domain=NSURLErrorDomain Code=-1007 "too many HTTP redirects" UserInfo={NSUnderlyingError=0x604000c4bcd0 {Error Domain=kCFErrorDomainCFNetwork Code=-1007 "(null)"}, NSErrorFailingURLStringKey=http://192.168.1.1:80:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000/, NSErrorFailingURLKey=http://192.168.1.1:80:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000/, NSLocalizedDescription=too many HTTP redirects} 
+0

リダイレクトを処理するコードを送信します。これはそのメソッドのバグのようです。 – dgatwood

+0

@dgatwoodコードを追加しました。私はこのメソッドのデフォルト完了ハンドラを使用しています。他のすべてのデバイスで正常に動作します。 – Thomas

+0

さて、ここでポート番号を追加するコードを見てみましょう。 – dgatwood

答えて

0

チャンスはあなたがすでにポート番号を持っているURLを取得し、第二1を追加している、しています。あなたのWebサーバー上のカスタムスクリプトやその一部がそうしています。その問題が解決しない場合は

NSURLComponents *components = [NSURLComponents componentsWithURL:HOST_URL]; 
components.port = 80; // or whatever 
HOST_URL = [components URL]; 

、それは:そして、あなたのコードスニペットで

、代わりのポートにあなたがそれをやっている方法を追加し、それなしでURLを構築し、これを行いますあなたのサーバ/ルータ上のスクリプトでおそらく起きているでしょうし、それに応じて何かできることがないかもしれません。

+0

答えをありがとう。間違いなく私がやっていたことよりも、ポートを割り当てるためのよりクリーンな方法。残念ながら、このメソッドを使用しても、同じエラーが発生します。最終的にHTTPリダイレクトが多すぎるために失敗します。元の質問にエラーを追加しました。 – Thomas

+0

デバイスからのカールの結果によると、その場所は正常に動作しているようです。だから私はそれが問題を引き起こしているデバイスが、より多くの可能性があるライブラリに間違っているかわからない? – Thomas

+0

おそらくNSURLは、URLに指定されたデフォルトポートを持っているのが本当に好きではありません。なぜあなたはポート番号を含めるのですか?それは非常に珍しいことです。 – dgatwood