Итак, у вас есть
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой связи. java.net.ConnectException: соединение отклонено
blockquote>Я цитирую из этот ответ , который также содержит пошаговое руководство по MySQL + JDBC:
Если вы получаете
SQLException: Connection refused
илиConnection timed out
или специфический для MySQLCommunicationsException: Communications link failure
, то это означает, что БД недоступно. Это может иметь одну или несколько из следующих причин:
- IP-адрес или имя хоста в URL-адресе JDBC неверен.
- Имя хоста в URL-адресе JDBC не распознается локальным DNS-сервером.
- Номер порта отсутствует или неверен в URL-адресе JDBC.
- Сервер базы данных недоступен.
- Сервер БД не принимает соединения TCP / IP.
- У сервера БД закончились соединения.
- Что-то между Java и БД блокирует соединения, например брандмауэр или прокси.
Чтобы решить ту или иную, выполните следующие советы:
blockquote>
- Проверьте и проверьте их с помощью
ping
.- Обновите DNS или используйте IP-адрес в URL-адрес JDBC.
- Проверьте его на основе
my.cnf
базы данных MySQL.- Запустите БД.
- Убедитесь, что mysqld запускается без
--skip-networking option
.- Перезапустите БД и исправьте свой код соответственно, чтобы он закрывал соединения в
finally
.- Отключить брандмауэр и / или настроить брандмауэр / прокси, чтобы разрешить / переместите порт.
См. также:
См. документ PHP: http://php.net/manual/en/function.curl-setopt.php
CURLOPT_POST:
ИСТИНА, чтобы выполнить обычную HTTP POST. Этот POST является обычным видом приложения / x-www-form-urlencoded, наиболее часто используемым форматами HTML.
CURLOPT_POSTFIELDS:
Если значение является массив, заголовок Content-Type будет установлен в multipart / form-data.
Итак, вы можете передать строку запроса, возвращенную
http_build_query()
вCURLOPT_POSTFIELDS
:post_url('/CCTRequest/get', http_build_query($g, null, '&'));
и удалите
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
. (На самом деле, переменная должна быть$ch
, но вы набрали$curl
, поэтому эта строка не работает.)С другой стороны, вы можете заменить
curl_setopt($ch, CURLOPT_POST, 1);
наcurl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
, он может предотвратить автоматическое кодирование данных. А затем отправьте данныеjson_encode()
.
Я решил использовать http_build_query($g, null, '&')
для создания данных.
$g = array("_id" => "111");
$g = http_build_query($g, null, '&');
$postapiresponse = post_url('/CCTRequest/get', $g);
У вас есть опечатка в коде, которая будет препятствовать установке заголовка $curl
в $ch
:
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
Вам также нужен CURLOPT_RETURNTRANSFER раскомментированный.
function post_url($apiRoute, $data) {
$request_url = 'www.example.com';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $request_url . $apiRoute);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:application/json']);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
{"status":404,"content":"_id is required"}
– Lawrence Cherone
13 July 2018 в 13:40