Как отправить данные JSON в cURL в PHP

Итак, у вас есть

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой связи. java.net.ConnectException: соединение отклонено

blockquote>

Я цитирую из этот ответ , который также содержит пошаговое руководство по MySQL + JDBC:

Если вы получаете SQLException: Connection refused или Connection timed out или специфический для MySQL CommunicationsException: Communications link failure, то это означает, что БД недоступно. Это может иметь одну или несколько из следующих причин:

  1. IP-адрес или имя хоста в URL-адресе JDBC неверен.
  2. Имя хоста в URL-адресе JDBC не распознается локальным DNS-сервером.
  3. Номер порта отсутствует или неверен в URL-адресе JDBC.
  4. Сервер базы данных недоступен.
  5. Сервер БД не принимает соединения TCP / IP.
  6. У сервера БД закончились соединения.
  7. Что-то между Java и БД блокирует соединения, например брандмауэр или прокси.

Чтобы решить ту или иную, выполните следующие советы:

  1. Проверьте и проверьте их с помощью ping.
  2. Обновите DNS или используйте IP-адрес в URL-адрес JDBC.
  3. Проверьте его на основе my.cnf базы данных MySQL.
  4. Запустите БД.
  5. Убедитесь, что mysqld запускается без --skip-networking option.
  6. Перезапустите БД и исправьте свой код соответственно, чтобы он закрывал соединения в finally.
  7. Отключить брандмауэр и / или настроить брандмауэр / прокси, чтобы разрешить / переместите порт.
blockquote>

См. также:

-3
задан James Z 13 July 2018 в 14:37
поделиться

3 ответа

См. документ 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().

1
ответ дан Jason 17 August 2018 в 12:46
поделиться

Я решил использовать http_build_query($g, null, '&') для создания данных.

 $g = array("_id" => "111");
$g = http_build_query($g, null, '&');
$postapiresponse = post_url('/CCTRequest/get', $g);
0
ответ дан Muddassir Khanani 17 August 2018 в 12:46
поделиться

У вас есть опечатка в коде, которая будет препятствовать установке заголовка $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;
}
0
ответ дан Vinnie James 17 August 2018 в 12:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: