在 Java 中复制 PHP POST 请求
Replicating a PHP POST request in Java
我有这个有效的 PHP 脚本,它向旧服务器(我无权访问)发出 POST 请求。我需要在 Java/Spring 中编写一个 REST api 来处理与这台旧服务器的所有通信。但是,我确实不断收到以下异常:
SSLHandshakeException: DH ServerKeyExchange does not comply to algorithm constraints
我的猜测是服务器的安全级别太低(我无法更改)。 PHP 脚本设置了一个 SSL 密码列表,我不知道如何在 Java 中复制它。因此问题是,如何降低我的 Java 应用程序的安全级别,以便它可以与服务器通信?
php代码:
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf8'));
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,4);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, "AES128-SHA");
$response = curl_exec($ch);
echo $response;
我写的Java代码:
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new StringEntity(json));
CloseableHttpResponse response = client.execute(httpPost); //Here SSLHandshakeException occurs
String result = getResultStringFromResponse(response);
client.close();
return result;
总的来说,我对 POST 请求的经验非常有限,并且已经在这个问题上工作了好几天,但没有任何进展。任何 guidance/tips 将不胜感激!
更新:
我设法通过删除 java 对 http 请求所需的关键约束解决了这个问题。
这是通过转到我的 jdk 文件夹并删除文件 /conf/security/java.security 中的“DH keySize < 1024”来完成的。该更改使 java 接受服务器的低安全级别。如果有人知道如何在运行时执行此操作(例如仅针对特定 POST 请求),那将是一个更好的解决方案。
我有这个有效的 PHP 脚本,它向旧服务器(我无权访问)发出 POST 请求。我需要在 Java/Spring 中编写一个 REST api 来处理与这台旧服务器的所有通信。但是,我确实不断收到以下异常:
SSLHandshakeException: DH ServerKeyExchange does not comply to algorithm constraints
我的猜测是服务器的安全级别太低(我无法更改)。 PHP 脚本设置了一个 SSL 密码列表,我不知道如何在 Java 中复制它。因此问题是,如何降低我的 Java 应用程序的安全级别,以便它可以与服务器通信?
php代码:
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf8'));
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,4);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, "AES128-SHA");
$response = curl_exec($ch);
echo $response;
我写的Java代码:
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new StringEntity(json));
CloseableHttpResponse response = client.execute(httpPost); //Here SSLHandshakeException occurs
String result = getResultStringFromResponse(response);
client.close();
return result;
总的来说,我对 POST 请求的经验非常有限,并且已经在这个问题上工作了好几天,但没有任何进展。任何 guidance/tips 将不胜感激!
更新:
我设法通过删除 java 对 http 请求所需的关键约束解决了这个问题。
这是通过转到我的 jdk 文件夹并删除文件 /conf/security/java.security 中的“DH keySize < 1024”来完成的。该更改使 java 接受服务器的低安全级别。如果有人知道如何在运行时执行此操作(例如仅针对特定 POST 请求),那将是一个更好的解决方案。