【发布时间】:2020-04-16 09:03:45
【问题描述】:
这是一个指向图片的 URL:
如果我在 CLI 中使用 cURL 作为这个命令,我会得到图像:
/usr/bin/curl -o 1234.jpg 'the_url_to_image'
我需要在 PHP 中使用带有参数的 cURL。 试了几个参数来获取图片,总是报403错误
对指定资源的访问已被禁止。 Apache Tomcat
我的参数(只有cURL参数,这里没有写图片到文件的代码):
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $img_url);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, false);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR,$cookie_filename);
curl_setopt($ch, CURLOPT_COOKIEFILE,$cookie_filename);
$page_content = curl_exec($ch);
curl_close($ch);
编辑
如果我将图像 URL 提供给此页面:
onlinecurl.com
我得到了图像二进制文件,但没有错误消息。
所以图片可以用cURL保存,我只需要把curl_setopt设置好就行了。
编辑
通过在 CLI 中运行 a 命令将图像保存到本地路径
/usr/bin/curl -o 1234.jpg 'the_url_to_image'
使用
运行相同的命令时shell_exec("/usr/bin/curl -o 1234.jpg 'the_url_to_image'")
错误信息保存在 1234.jpg 文件中。
同一命令的命令行和代码执行有什么区别?
【问题讨论】:
-
可能类似于
file_put_contents('save path here', file_get_contents('url here', 'create curl stream context here')) -
@user3783243 对于
file_get_contents('image_url'),我得到了同样的 403 错误 -
使用 curl_file_create 函数php.net/manual/en/curlfile.construct.php