为了账号安全,请及时绑定邮箱和手机立即绑定

无法下载使用 PHP 卷发的远程映像

无法下载使用 PHP 卷发的远程映像

PHP
撒科打诨 2022-09-25 20:25:59
我联系了 scrapestack 的支持人员,并确认他们的 API 不支持图像文件。我正在尝试使用CURL和php下载远程图像。以下是我的代码。但是每当我尝试打开下载的图像时,我总是得到:Cannot read this file. This is not a valid bitmap file, or its format is not currently supported.有人知道我的代码有什么问题吗?谢谢。$image ="http://api.scrapestack.com/scrape?access_key=TOKEN-HERE&url=https://i.imgur.com/Cbiu8Ef.png";$imageName = pathinfo( $image, PATHINFO_BASENAME );$ch = curl_init();curl_setopt( $ch, CURLOPT_URL, $image );curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);curl_setopt($ch, CURLOPT_HTTP_CONTENT_DECODING, false);$source = curl_exec( $ch );$info = curl_getinfo($ch);curl_close( $ch );file_put_contents( $imageName, $source );我无法打开该文件,当我尝试以崇高的方式打开它时,它卡在加载图像。当我用记事本打开它时,我得到了看起来像PNG图像的以下内容,但它不是有效的图像。文件以 PNG 开头IHDR       �   q�I�    IDATx�k�]�u�o��(��_�M��m�8:���_r�G您可以在此处查看该文件:https://gofile.io/?c=cfsYf2看起来问题正在通过 Scrapestack 发出 curl 请求,因为如果我直接将 curl 指向图像 url,图像就会正确下载,如下所示:$image ="https://i.imgur.com/Cbiu8Ef.png";
查看完整描述

3 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

我今天玩了一下刮刀,它似乎不支持图像抓取。最好是您可以联系他们的客户支持并找出答案。


@Towsif是正确的,您尝试获取页面,而不是实际图像。我很快就把一些东西放在一起,试试看这是否适合你。


$queryString = http_build_query([

  'access_key' => 'replace this with your own token',

  'url' => 'https://i.imgur.com/Cbiu8Ef.png',

]);


$ch = curl_init(sprintf('%s?%s', 'http://api.scrapestack.com/scrape', $queryString));

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);

curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

$image_source = curl_exec( $ch );

curl_close( $ch );

file_put_contents( 'Cbiu8Ef.png' , $image_source );


查看完整回答
反对 回复 2022-09-25
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

看起来您得到的响应是损坏的PNG图像。

如果您使用的是5.1.3之前版本的PHP,则需要为二进制数据传输指定一个附加选项,例如图像:

curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);

如果上述选项不能解决问题,您可以尝试设置

curl_setopt($ch, CURLOPT_HTTP_CONTENT_DECODING, false);

如果响应的标头设置错误,则让 curl 对原始输出执行不需要的解码。Content-Type


查看完整回答
反对 回复 2022-09-25
?
隔江千里

TA贡献1906条经验 获得超10个赞

你的问题是这个网址。

$image ="http://api.scrapestack.com/scrape?access_key=TOKEN-HERE&url=https://imgur.com/a/E5ehGuv";

如果您转到此网址

https://imgur.com/a/E5ehGuv

您将看到图像页面,但看不到图像路径。 函数在这里不起作用并引发错误。pathinfo()

如果您右键单击该图像并在新选项卡中打开图像,您将看到图像路径,在这种情况下,即

https://i.imgur.com/Cbiu8Ef.png

所以你可以试试这个网址

$image ="http://api.scrapestack.com/scrape?access_key=TOKEN-HERE&url=https://i.imgur.com/Cbiu8Ef.png";


查看完整回答
反对 回复 2022-09-25
  • 3 回答
  • 0 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号