curl_exec всегда возвращает 0?

#php #session #cookies #curl

#php #сессия #файлы cookie #curl

Вопрос:

У меня есть эта функция:

 function Connect($url, $post = 0, $postfields = '') 
{
    $ch = curl_init();
    if($post > 0) {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
    } 
    curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/joomla-cookie.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).'/joomla-cookie.txt');
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $exec = curl_exec($ch);
    if($exec) { return $exec; } else { return 0; }
}
  

Я называю это так Connect($host)

И он всегда возвращает 0…

Комментарии:

1. $host предполагает, что вы отправляете «google.com «, где в качестве необходимого URL указан http://google.com , что вы используете?

2. @Sabeen я фактически отправляю его с https: // Может быть, это потому, что https:// а не http: // ? потому что » google.com » работает.

Ответ №1:

Попробуйте установить CURLOPT_SSL_VERIFYPEER и CURLOPT_SSL_VERIFYHOST в значение false. это должно сработать.

 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  

Комментарии:

1. @Sabeen Есть способ включить cookie для поддержки SSL тоже? Потому что сеанс сохраняется только при использовании http:// …

2. Я не думаю, что https должен влиять на способ хранения файлов cookie. Посмотрите на joomla-cookie.txt файл, чтобы посмотреть, что он содержит, это может дать вам некоторые подсказки.

3. @Sabeen Да, я не думаю, что это также должно влиять на это, но это так, лол. Я понятия не имею о файлах cookie.. Вот pastebin: pastebin.com/RX9vnEbT

4. Вы переходите между http и https?

5. попробуйте убедиться, что вы начинаете с https и отправляете на https. Я полагаю, что если вы перейдете между https и http, вы потеряете cookie. Также является ли домен одинаковым и для https. иногда сайты имеют secure.domain.com и т. Д

Ответ №2:

Проверьте, не было ли ошибки с запросом после curl_exec:

 if(curl_errno($ch)){
    echo 'Curl error: ' . curl_error($ch);
}
  

Это предоставит вам достаточно информации, чтобы узнать, была ли ошибка с запросом. Если ошибки не было, вы можете проверить запрос, отправленный после curl_exec, чтобы вы могли дважды проверить, что все отправленное на месте:

 print_r(curl_getinfo($ch));
  

Комментарии:

1. Спасибо! я получаю ошибку SSL: ошибка Curl: проблема с сертификатом SSL, убедитесь, что сертификат CA в порядке. Подробности: ошибка: 14090086: Процедуры SSL: SSL3_GET_SERVER_CERTIFICATE: сбой проверки сертификата Идентификатор dSession: Ошибка Curl: проблема с сертификатом SSL, убедитесь, что сертификат CA в порядке. Подробности: ошибка: 14090086: процедуры SSL: SSL3_GET_SERVER_CERTIFICATE: проверка сертификата не удалась, поэтому это должно быть из-за https: //..