2015-08-19 5 views
3

Это код, я использую:cURL работает в CLI, но не в PHP?

curl -k https://www.ashleydirect.com/graphics/ad_images/T908-6.jpg 

Это прекрасно работает (далее «-k» флаг необходимо для того, чтобы работать или это тайм-аут)

Затем я использую этот код в PHP:

$ch = curl_init("https://www.ashleydirect.com/graphics/ad_images/T908-6.jpg"); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($ch); 
curl_close($ch); 

И раз из - я попробовал тонну вариаций, но $result всегда ложные.

Это информация PHP Curl, когда я phpinfo():

Curl поддержки включен
Curl Информация 7.38.0
Возраст Особенности
AsynchDNS No
не Debug Нет
GSS-Обсуди Нет
IDN Да
IPv6 Да
Largefile Да
NTLM Да
SPNEGO Нет
SSL Да
ССПИ Нет
krb4 Нет
libz Да
CharConv Нет
Протоколы ДИКТ, файл, FTP, FTPS, суслик, HTTP, HTTPS, IMAP, IMAPS, pop3 , pop3s, rtsp, smtp, smtps, telnet, tftp
Хост x86_64-unknown-linux-gnu
SSL версии
OpenSSL/1.0.1e
ZLib Версия 1.2.3

Любые идеи, было бы весьма признателен.


UPDATE

Вот информация из curl_getinfo($ch):

array (
    'url' => 'https://www.ashleydirect.com/graphics/ad_images/T908-6.jpg', 
    'content_type' => NULL, 
    'http_code' => 0, 
    'header_size' => 0, 
    'request_size' => 0, 
    'filetime' => -1, 
    'ssl_verify_result' => 1, 
    'redirect_count' => 0, 
    'total_time' => 59.27538100000000298450686386786401271820068359375, 
    'namelookup_time' => 0.00975999999999999957867036215475309290923178195953369140625, 
    'connect_time' => 0.05170500000000000095923269327613525092601776123046875, 
    'pretransfer_time' => 0, 
    'size_upload' => 0, 
    'size_download' => 0, 
    'speed_download' => 0, 
    'speed_upload' => 0, 
    'download_content_length' => -1, 
    'upload_content_length' => -1, 
    'starttransfer_time' => 0, 
    'redirect_time' => 0, 
    'certinfo' => 
    array (
), 
    'primary_ip' => '65.207.240.29', 
    'primary_port' => 443, 
    'local_ip' => '172.24.32.132', 
    'local_port' => 54461, 
    'redirect_url' => '', 
) 

UPDATE 2

Ответ curl_error:

Unknown SSL protocol error in connection to www.ashleydirect.com:443 

UPDATE 3 - Решение

Я хотел четко поставить решение, которое я придумал, благодаря @Valery Viktorovsky который указал, что они принимают только TLS 1.0.

раствор, а затем, чтобы добавить это:

// Set to TLS 1.0 (CURL_SSLVERSION_TLSv1_0) 
curl_setopt($ch, CURLOPT_SSLVERSION, 4); 

More information here

+1

Вы за прокси? – Willian

+0

Вы пытались 'CURLOPT_SSL_VERIFYPEER', как насчет' CURLOPT_SSL_VERIFYHOST' только для отладки? – Scuzzy

+0

@Scuzzy Я проверил, никакой разницы. –

ответ

3

Ваш код PHP в порядке. Сделайте curl_getinfo($ch) и curl_error($ch) после curl_exec, чтобы увидеть код ответа, возвращенный сервером.

Обновление: я протестировал сертификат SSL selleydirect.com и поддерживает только TLS 1.0. Поэтому убедитесь, что ваша версия php поддерживает TLSv1.0.

+1

Если это тайм-аут, кода ответа не будет. – Barmar

+0

Правильно, без кода ответа, я разместил информацию выше. –

+0

Несомненно, curl_getinfo возвращает пустое (0) 'http_code' –

2

Он отлично работает для меня, как командной строки без -k, так и кода PHP.

Если по какой-то причине он раз вне вы можете установить большее время ожидания:

// if it times out on establishing the connection 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // seconds 
// if it times out while waiting for the response 
curl_setopt($ch, CURLOPT_TIMEOUT, 60);   // seconds 

Кроме того, вызов curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false) обычно сопровождается:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 

, чтобы получить полный эффект.

+0

Время истекает через 60 секунд, я тоже пробовал с VERIFYHOST, то же самое.Полезно знать, что это работает для вас ... –

+0

Командная строка 'curl', с или без' -k' запускается почти мгновенно и для скачивания файла требуется около 12 секунд. Этот [pastie] (http://pastie.org/10362528) содержит 'print_r (curl_getinfo ($ ch));' после того, как версия PHP завершила передачу. Я использую точный код, который вы опубликовали. Вероятно, это проблема подключения на вашей стороне. – axiac

+0

Спасибо - вы хоть представляете, какой тип соединения может начаться? curl -k работает для меня мгновенно, что повлияет на PHP, но не на CLI? –