Загрузить изображение SSL в PHP cURL - PullRequest
0 голосов
/ 26 декабря 2018

Я хочу скачать изображение в PHP, используя curl.Но это не работает.Когда я запускаю код, это занимает около 1 минуты и уходит в тайм-аут с пустым загруженным файлом изображения.

кажется, что cURL не может разрешить передачу SSL.

Я пробовал много онлайнрешения.Но не любой решит мою проблему.Пожалуйста, помогите мне

Вот мой код: (Метод 1)

$http_img = 'https://www.adidas.ca/dis/dw/image/v2/aaqx_prd/on/demandware.static/Sites-adidas-CA-Site/Sites-adidas-products/en_CA/v1545380233904/zoom/DV2807_00_plp_laydown.jpg?sw=440&sfrm=jpg';
$dest_image = fopen('dest_image.jpg', 'wb');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $http_img);
curl_setopt($ch, CURLOPT_FILE, $dest_image);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_CAINFO, 'C:/wamp/www/test/cacert.pem');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_exec($ch);

Вот мой код: (Метод 2)

$http_img = 'https://www.adidas.ca/dis/dw/image/v2/aaqx_prd/on/demandware.static/Sites-adidas-CA-Site/Sites-adidas-products/en_CA/v1545380233904/zoom/DV2807_00_plp_laydown.jpg?sw=440&sfrm=jpg';
$dest_image = fopen('dest_image.jpg', 'wb');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $http_img);
curl_setopt($ch, CURLOPT_FILE, $dest_image);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_exec($ch);

Я где-то читал, что старыйcurl или OpenSSL не поддерживает TLS 1.2.Но это не в моем случае.Вот подробности версии PHP cURL:

array (size=9)
  'version_number' => int 473856
  'age' => int 4
  'features' => int 2428829
  'ssl_version_number' => int 0
  'version' => string '7.59.0' (length=6)
  'host' => string 'x86_64-pc-win32' (length=15)
  'ssl_version' => string 'OpenSSL/1.1.0i' (length=14)
  'libz_version' => string '1.2.11' (length=6)
  'protocols' => 
    array (size=21)
      0 => string 'dict' (length=4)
      1 => string 'file' (length=4)
      2 => string 'ftp' (length=3)
      3 => string 'ftps' (length=4)
      4 => string 'gopher' (length=6)
      5 => string 'http' (length=4)
      6 => string 'https' (length=5)
      7 => string 'imap' (length=4)
      8 => string 'imaps' (length=5)
      9 => string 'ldap' (length=4)
      10 => string 'pop3' (length=4)
      11 => string 'pop3s' (length=5)
      12 => string 'rtsp' (length=4)
      13 => string 'scp' (length=3)
      14 => string 'sftp' (length=4)
      15 => string 'smb' (length=3)
      16 => string 'smbs' (length=4)
      17 => string 'smtp' (length=4)
      18 => string 'smtps' (length=5)
      19 => string 'telnet' (length=6)
      20 => string 'tftp' (length=4)

Вы также можете предложить решение, отличное от cURL, для загрузки образа SSL

[EDIT]

Журнал ошибок для (Способ 2)

*   Trying 104.117.73.200...
* TCP_NODELAY set
* Connected to www.adidas.ca (104.117.73.200) port 443 (#0)
* ALPN, offering http/1.1
* ignoring certificate verify locations due to disabled peer verification
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: C=DE; ST=Bavaria; L=Herzogenaurach; O=adidas AG; OU=Global IT; CN=www.global.adidas.com
*  start date: Jul 19 00:00:00 2018 GMT
*  expire date: Oct 18 12:00:00 2019 GMT
*  issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=GeoTrust RSA CA 2018
*  SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
> GET /dis/dw/image/v2/aaqx_prd/on/demandware.static/Sites-adidas-CA-Site/Sites-adidas-products/en_CA/v1545380233904/zoom/DV2807_00_plp_laydown.jpg?sw=440&sfrm=jpg HTTP/1.1
Host: www.adidas.ca
Accept: */*

* OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
* stopped the pause stream!
* Closing connection 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...