最初に行うことは、コメントのnsfyn55のように、ブラウザを使用してヘッダーを検査することです。応答を返す前にUser-AgentHTTPヘッダーをチェックするWebサイトがあります。次に行うことは、HTTPSを使用する場合、セキュアレイヤーを適切に初期化する必要があるということです。このクラスを確認してください。
public class SSLConfiguration {
private static boolean isSslInitialized = false;
private static final String PROTOCOL = "SSL";
public static boolean ACCEPT_ALL_CERTS = true;
public static void initializeSSLConnection() {
if (!isSslInitialized) {
if (ACCEPT_ALL_CERTS) {
initInsecure();
} else {
initSsl();
}
}
}
private static void initInsecure() {
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};
// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance(PROTOCOL);
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
}
HttpsURLConnection.setDefaultHostnameVerifier(
new HostnameVerifier() {
@Override
public boolean verify(String string, SSLSession ssls) {
return true;
}
});
isSslInitialized = true;
}
private static void initSsl() {
SSLContext sc = null;
try {
sc = SSLContext.getInstance(PROTOCOL);
} catch (NoSuchAlgorithmException ex) {
throw new RuntimeException(ex);
}
try {
sc.init(null, null, new SecureRandom());
} catch (KeyManagementException ex) {
throw new RuntimeException(ex);
}
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String urlHostName, SSLSession session) {
/* This is to avoid spoofing */
return (urlHostName.equals(session.getPeerHost()));
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
isSslInitialized = true;
}
}
特にWebサイトに適切な証明書がない場合は、接続が失敗する可能性が高くなります。コードのクラスのコンストラクター内に、次のコードを挿入します。
SSLConfiguration.initializeSSLConnection();
考慮すべきいくつかの事柄-openConnection
それが推奨された後、あなたは以下を追加しました:
con.setRequestMethod(METHOD);
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
User-Agent
ただし、リモートサーバーから応答を受け取るので、適切なヘッダー、特にとを指定することが重要であると私は信じていますAccept
。上記が問題の解決に役立たない場合は、エラーのスタックトレースを出力し、(リモートからの)エラーストリームを読み取って、より意味のあるエラーメッセージを取得します。Firefoxを使用している場合、LiveHTTPヘッダーは非常に便利なソリューションです。また、 cURLは、HTTPリクエストを処理する際の最高のコマンドラインツールです。