Не может соединиться с сайтом HTTPS с помощью ЗАВИХРЕНИЯ. Возвраты 0 содержания длины вместо этого. Что я могу сделать?

63
задан alex 19 March 2011 в 01:34
поделиться

9 ответов

Необходимо также попытаться проверить сообщения об ошибках в curl_error (). Вы, возможно, должны были бы сделать это однажды после каждой функции curl_*.

http://www.php.net/curl_error

33
ответ дан too much php 24 November 2019 в 16:08
поделиться

Сегодня у меня была та же проблема. Завихрение идет с устаревшим файлом для аутентификации сертификатов HTTPS от.

получают новый от:

http://curl.haxx.se/ca/cacert.pem

сохраняет его в некоторый dir на Вашем сайте

и добавляет

curl_setopt ($curl_ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem"); 

К каждому запросу:-)

, ИГНОРИРУЮТ любые тупые комментарии об отключении CURLOPT_VERIFYPEER и CURLOPT_VERIFYHOST!! Это оставляет Ваш код уязвимым для человека в средних нападениях!

редактирование декабря 2016:

Решают это правильно при помощи метода Jasen, упомянутого ниже.

добавляют curl.cainfo=/etc/ssl/certs/ca-certificates.crt к Вам php.ini

редактирование октября 2017:

существует теперь пакет компоновщика, который помогает Вам управлять сертификатами CA, так, чтобы Вы не были уязвимы, если Ваш cacert.pem становится устаревшим из-за отмены сертификатов.

https://github.com/paragonie/certainty-> composer require paragonie/certainty:dev-master

98
ответ дан SchizoDuckie 24 November 2019 в 16:08
поделиться

Каждый раз, когда я тестирую что-то с PHP/Curl, я пробую его из командной строки сначала, выясняю, какие работы, и затем портируют мои опции на PHP.

3
ответ дан Issac Kelly 24 November 2019 в 16:08
поделиться

могла бы быть проблема в Вашей хостинговой компании от того, где Вы тестируете безопасную коммуникацию на шлюз, что они не могли бы позволить Вам делать это.

также могло бы быть имя пользователя, пароль, который должен быть обеспечен прежде, чем соединиться с удаленным хостом.

или Ваш IP, возможно, должен был бы быть в списке утвержденного IP для удаленного сервера для коммуникации для инициирования.

0
ответ дан 24 November 2019 в 16:08
поделиться

Вы используете метод POST, но Вы обеспечиваете массив данных? Например,

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
-1
ответ дан too much php 24 November 2019 в 16:08
поделиться

Я использовал file_get_contents , используя stream_create_context , и он отлично работает:

$postdataStr = http_build_query($postdataArr);

$context_options = array (
        'http' => array (    <blink> // this will allways be http!!!</blink>
            'method' => 'POST',
            'header'=> "Content-type: application/x-www-form-urlencoded\r\n"
                . "Content-Length: " . strlen($postdataArr) . "\r\n"
                . "Cookie: " . $cookies."\r\n"
            'content' => $postdataStr
            )
        );

$context = stream_context_create($context_options);
$HTTPSReq = file_get_contents('https://www.example.com/', false, $context);
1
ответ дан 24 November 2019 в 16:08
поделиться

Я обнаружил эту ошибку в недавнем проекте приложения. Я писал для запуска из командной строки или окна браузера, поэтому я использовал обнаружение сервера, чтобы получить относительный URL-адрес документа, который я просил. Проблема заключалась в том, что сайт https, и каждый раз, когда я пытался получить доступ к http: // (тот же сервер), cURL любезно менял его на https.

Это нормально работает в браузере, но с в командной строке я бы получил ошибку SSL, даже если для обоих параметров verify установлено значение false. Мне нужно было

1) Проверить $ _SERVER ['HTTP_HOST']. Если присутствует, используйте ($ _SERVER ['HTTPS']? "Https: //": "http: //"). $ _ SERVER ['HTTP_HOST']

2) Проверьте $ _SERVER ['COMPUTERNAME'] и если он соответствует производственному серверу, укажите URL-адрес https. (" https:

0
ответ дан 24 November 2019 в 16:08
поделиться

Иногда, чтобы не допустить ошибок с https, необходимо обновить сертификаты Curl до последней версии.

2
ответ дан 24 November 2019 в 16:08
поделиться

Примечание: это строго не производственное использование. Если вы хотите быстро отладить, это может быть полезно. В противном случае используйте ответ @ SchizoDuckie выше.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);     
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 

Просто добавьте их. Оно работает.

28
ответ дан 24 November 2019 в 16:08
поделиться
Другие вопросы по тегам:

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