問題タブ [httpsurlconnection]
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.
java - Android: java.lang.IllegalStateException: すでに接続されています
コードのサンプルをテストしていますが、常にエラーが発生しますconnection.setDoInput(true);
エラーログはjava.lang.IllegalStateException: Already connected
. 私はこれらを試しましたが、どれも機能していません:
編集:私が電話しなかったときでもconnection.connect()
、同じエラーが発生しますalready connected
。
java - 例外後に Java http 接続インスタンスを使用する
次のコードは安全ですか:
特に、InterruptedIOException (読み取りタイムアウトなど) が発生した場合に、次のようなメソッドを呼び出すのは安全getContentEncoding()
ですか? 私が理解している限り、この方法では HTTP(S) ヘッダーを読み取るためにライブ接続が必要です。
更新 (追加情報):
この質問は、実際のシステムでの経験に由来します。当時、システムは Oracle/Sun JVM 1.6 で実行されていたと思います。コードはほとんど同じです:
HTTPSリクエストtryGetResponse
で問題が発生しました。
getContentEncoding()
呼び出し中のソケット接続 (または読み取り) でシステムが自然にハングアップしました。
SocketTimeoutException
初期コードでスローされた直後。
そのため、getContentEncoding()
タイムアウトを設定せずに新しい接続を確立しようとする (または Java 6 で試行した) ようです。
android - HttpConnection.getInputStream() の実行を停止するにはどうすればよいですか?
問題
から実行されるメソッドHttpsUrlConnection.getInputStream()
を内部でAsyncTask.doInBackground()
実行していDialogFragment
ます。
ユーザーがフラグメントを終了したときに終了させたい。
そうしないと、無駄なデータがバックグラウンドで読み込まれ続けます。
私が試したこと
URLConnection
オブジェクトをコールバックに設定しようとしnull
ましたonDismiss()
が、メソッドの実行が停止しませんgetInputStream()
。UI スレッドで呼び出すことはできませんmConnection.disconnect()
。別の AsyncTask では効果がありません。これらは順次実行されるためです。
AsyncTask.cancel()
doInBackground()
メソッドを停止しないため、役に立ちません。
質問
getInputStream() メソッドから強制的に戻るにはどうすればよいですか?
コード
@CarlosRobles のリクエストによると、これが私の doInBackground() のコードです。
その他の考慮事項
UrlConnection.getResponseCode()
上記のスニペットで呼び出されたすべての関数の実行時間を確認したところ、実行に最も時間がかかる関数であることがわかりました。UrlConnection.getInputStream()
内部への呼び出しによるものだと思います。後で、inputStream は常に接続オブジェクトにキャッシュされるためUrlConnection.getInputstream()
、関数でほとんど時間がかかりません。
android - Android の証明書を使用した SSL クライアント認証
サーバーに接続していくつかの Web サービスを呼び出す Android アプリを作成しています。このサーバーは SSL に自己署名証明書を使用し、認証にはクライアント証明書を必要とします。
Android Chrome ブラウザーまたは Iphone の Safari ブラウザーを使用してサーバーに接続すると、完全に動作します。SSL 接続が確立され、クライアント証明書認証が成功し、Web サービスにリダイレクトされます。しかし、ストックAndroidブラウザ、イルカなどの他のブラウザに接続すると、ネットワークタイムアウトが発生します。
また、Android アプリに接続すると、次のエラーが発生します。
chariotsolutions のブログをフォローしました: http://chariotsolutions.com/blog/post/https-with-client-certificates-on/
また、portecle GUI を使用してクライアント証明書を BKS 形式に変換しました。
ここに私のコードがあります:
注意: テスト目的で、クライアント証明書認証を使用せずにサーバーに接続する (結果として別の URL になる) オプションもあります。この場合の上記のコードは同じですが、context.init(null, tmf.getTrustManagers(), null)のみです。これは完全に機能しており、SSL 接続を確立して Web サービスにリダイレクトしています。
本当に気になるのは、すべてが iPhone の Chrome と Safari で動作していることです。だから、問題は私の Android コードだけにあると思いますか?
誰かが同様の問題を抱えていて、アイデアや解決策を持っていますか?
どうもありがとうございました!
編集:
そもそも SSL 接続に必要な Cookie Manager もセットアップしたことを忘れていました。(onCreate()のMainActivityに設定)
それがなければ、(クライアント証明書なしで) SSL 接続を確立しようとすると同じエラーが発生しましたが、残念ながらクライアント証明書でも役に立ちません。
更新 #2
nelenkov.blogspot.de/2011/12/using-custom-certificate-trust-store-on.html (この素晴らしい記事 @ Nikolay に感謝) と Github の彼の Android Connectiontest Application からの多くの背景情報を使用して、いくつかの興味深いものを見つけました。
サーバーは、接続時に Cookie を受け取るように設定されています。前のステップでクライアント認証なしで接続すると、接続が「機能する」ため、2回目の接続(クライアント認証を使用)で、彼はそのCookieのみを検証し、通過させます。
最後に気付いた 2 番目のことは、サーバーがNonceを提供してくれることです。そのノンスを返すことにより、接続は自動的にそのリダイレクトに従うべきだと思います。Firefox やストック ブラウザなどの一部のブラウザは、(Responsecode 302 でリダイレクトされた後) 接続を停止し、最終的に 404 で停止し、..policy?nonce=fno3i9Hsfn3uz のような URL になります。次に、この URL を手動でリロードして、Web サービスにアクセスする必要があります。残念ながら、これは私の Android アプリケーションでは機能しません。
おそらく、この問題はサーバー側の設定ミスではないでしょうか?
android - HttpsUrlConnection EOFException
投稿リクエストに次のコードを使用しています
http 経由で使用すると、すべて正常に動作しますが、https 経由で取得します
httpsurlconnection で接続バグのリサイクルに関する問題と考えられる解決策を見つけました。
しかし、それは私にはうまくいきません。
java - Java (Android) で SSL 検証を再度有効にする
私の Android アプリ (テスト アプリ) で、以下の disableSslValidation メソッドを実行して、SSL 証明書の検証を無効にします。プロセスを再起動せずに、SSL 証明書の検証を有効にしたいと考えています。どうすればそれを達成できますか?
編集: SSL検証を無効にすることに伴うリスクを十分に認識しており、そのリスクを承知の上で受け入れます。
java - URLConnection setRequestProperty content-length が正しくありません
サーバーに情報を送信したいのですが、 によって表示される情報の一部にすぎず、Content-Length
正しくありません。
私のコード:
送信されるのは 680 バイトだけですが、約 2000 バイトになるはずです。
指図:
結果:
このコマンドは以下を変更しませんでしたContent-Length
: