Блог
cURL возвращает bool(false) при выполнении запроса SOAP
#php #curl #soap
#php #curl #soap
Вопрос:
Я пытаюсь выполнить запрос SOAP с помощью cURL, но я получаю следующие ошибки. Для вывода результата я получаю «bool(false)«. Для функции curl_error() я получаю «Время ожидания операции истекло через 30000 миллисекунд при получении 0 байт«.
Мой вопрос в том, не упускаю ли я чего-то, что могло бы помешать соединению, возможно, в параметрах cURL?
function soap_subscriber($subscriber_email) < $soap_endpoint = '[HIDDEN]'; $soap_username = '[HIDDEN]'; $soap_userpass = '[HIDDEN]'; define('USERNAME', '[HIDDEN]'); define('PASSWORD', '[HIDDEN]'); define('ENDPOINT', $soap_endpoint); date_default_timezone_set('America/Nassau'); $ch = ' . soap_username . . soap_userpass . [HIDDEN] DataExtensionObject[HIDDEN] SubscriberID FirstName Email Email equals . $subscriber_email . '; $soap_header = array( "Content-type: application/soap xml;charset="utf-8"", "Accept: text/xml", "Cache-Control: no-cache", "Pragma: no-cache", "SOAPAction: ", "Content-length: ".strlen($ch), ); $ch = curl_init(); $curl_options = array( CURLOPT_URL => ENDPOINT, CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30, CURLOPT_USERPWD => USERNAME . ':' . PASSWORD, CURLOPT_HTTPAUTH => CURLAUTH_ANY, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_HEADER => true, CURLOPT_POSTFIELDS => $ch, CURLOPT_HTTPHEADER => $soap_header, CURLOPT_POST => true, ); curl_setopt_array($ch, $curl_options); $response = curl_exec($ch); $error = curl_error($ch); curl_close($ch); var_dump($response); var_dump($error); > soap_subscriber('[HIDDEN]'); ?>
Комментарии:
1. Почему вы используете CURL для SOAP? В PHP есть библиотека SOAP
2. @MonkeyZeus Хорошо, я попробую это как часть функции в Drupal вместо cURL.
3. Звучит неплохо, удачи!
4. @MonkeyZeus Могу ли я подтвердить, что мне не нужно будет ничего устанавливать, если я использую это в пользовательском модуле для Drupal 7?
5. Я не знаю, это зависит от вашей установки PHP. Вам нужно убедиться, что расширение SOAP включено. Вы можете убедиться в этом, либо проверив php.ini файл, либо просмотрев выходные данные phpinfo();
Ответ №1:
Для завершения выполнения вашего запроса SOAP требуется более 30 секунд. Некоторые решения, которые вы можете попробовать:
- Увеличьте ограничение по времени работы cURL: curl_setopt($ch, CURLOPT_TIMEOUT, 400); // 400 seconds
- Установите set_time_limit значение 0, чтобы ваши запросы выполнялись в течение бесконечных секунд: set_time_limit(0); но недостатком является то, что возможно зависание или нехватка памяти.
- Попробуйте добавить это в свои параметры cURL, чтобы предотвратить бесконечное перенаправление с сервера: curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
Комментарии:
1. Я пытался внести эти изменения. Теперь я получаю следующую ошибку: строка(45) «OpenSSL SSL_read: SSL_ERROR_SYSCALL, ошибка 54»
2. Знаете ли вы, что может быть причиной ошибки OpenSSL?
3. Error 54 означает невозможность подключения. Вот почему вы получаете тайм-аут. Может быть проблема с SSL certificate установкой или конфигурацией URL, к которому вы пытаетесь подключиться, или из-за устаревшего пакета корневых сертификатов CA.
4. Может ли локальное тестирование вызвать эту ошибку? Есть ли какой-либо способ обойти это?
5. Попробуйте протестировать ваш ENDPOINT SSL онлайн. Вот один из них, который вы можете использовать: ssllabs.com/ssltest Прочитайте ошибки, и мы сможем выполнить отладку оттуда. Если с SSL все в порядке, проблема в ваших конфигурациях PHP и cURL.
file_get_html возвращает bool(false)
В массив приходит bool(false), почему?
Приветствую! По урокам делаю интернет магазин, который имеет каталог: но при обращении к.
Перестала грузиться страница по CURL — bool(false)
Всем привет. Долгое время без проблем работала вот такая функция public function requesting()< .
В массив приходит bool(false) и далее из за этого в foreach инвалидный аргумент
Всем доброго времени суток! Я нуб в ПХП, только начинаю учиться. По видеоурокам делаю интернет.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
$base = 'https://play.google.com/store/apps'; $curl = curl_init(); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_URL, $base); curl_setopt($curl, CURLOPT_REFERER, $base); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $str = curl_exec($curl); curl_close($curl); // Create a DOM object $html_base = new simple_html_dom(); // Load HTML from a string $html_base->load($str);
curl_setopt($curl, CURLOPT_HEADER,true);
может и куки подключать.
бывает, что и вообще сайт закрывают для парсинга.
с каждым сайтом надо искать отдельный подход.
Лучше бы старый добрый file_get_contents() ?
Сообщение от sergm87
Лично я от нее уж несколько лет отказался в пользу чистого РНР. Иногда работает некорректно, да и практически бесполезна.
Сообщение от vinikon
Да, по моему опыту — скажем, для Google достаточно 3. 4 некорректных (т.е. небраузерных, без корректных заголовков) запроса — и всё. Да и Яндекс — тоже в последние годы (там, помнится, 406 при этом выдается).
Сообщение от Htext
нет. я имел в виду, что решение с curl не всегда может быть таким простым, может придется дополнить новыми параметрами создаваемое подключение. ведь у ТС не факт, что google.
curl имеет гораздо больше опций для настройки, гораздо быстрее, в нем можно устанавливать timeout, который fle_get_contents игнорирует часто при отсутствии файлов. использовать file_get_content в связке с stream_context_create — сомнительная с моей точки зрения альтернатива.
можно еще пробовать fsockopen.
Тут каждый решает по своему. Может у ТС все и так заработало.
По поводу simple_html_dom — он еще и утечки памяти часто допускает. тоже не стал бы использовать. Давно уже пользовался PHPquery. Чистый PHP — имеете в виду xpath, domdocument? обоими руками,как говорится, ЗА. Но часто встречаются некорректные html страницы. Они отказывались на них нормально парсить — вот в чем проблема.
php — CURL returns bool(false). Why?
ini_set('max_execution_time', 60); $cookieFile = tempnam(sys_get_temp_dir(), 'ccf'); $timeOut = ini_get('max_execution_time') - 5; $ch = curl_init(); curl_setopt_array( $ch, [ CURLOPT_AUTOREFERER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_MAXREDIRS => 3, CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => false, CURLOPT_CONNECTTIMEOUT => $timeOut, CURLOPT_TIMEOUT => $timeOut, CURLOPT_COOKIEFILE => $cookieFile, CURLOPT_COOKIEJAR => $cookieFile, CURLOPT_POSTFIELDS => [ "num" => "7746468933", "date" => "2010-16-20", "captchaWord" => "", "reCaptchaToken" => "03. FU" ], CURLOPT_URL => 'http://check.gibdd.ru/proxy/check/driver/', CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36', CURLOPT_HTTPHEADER => [ 'Upgrade-Insecure-Requests: 1', 'Pragma: no-cache', 'Cache-Control: no-cache', 'Origin: http://check.gibdd.ru/', 'Referer: http://check.gibdd.ru/check/driver', ], ] ); var_dump(curl_exec($ch)); curl_close($ch);
As a result, I get bool (false) Failed to connect to xn — b1afk4ade.xn — 90adear.xn — p1ai port 443: The connection timed out strangely, but why doesn’t it connect? from the browser of norms .. should get error 201 on the idea that the captcha did not work. And I get false. Please tell me. Thank you in advance.
CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, — Doesn’t help.
Share solution ↓
Additional Information:
Didn’t find the answer?
Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.
Similar questions
Find the answer in similar questions on our website.