我试图下载远程图像(来自多个网站),但这些代码都有效
allow_url_fopen已打开,但这些代码将返回0字节
$url = 'http://example.com/image.php';
$img = 'teste.jpg';
file_put_contents($img, file_get_contents($url));
或
copy('http://example.com/image.php', 'teste.jpg');
当我使用curl(在主机上启用)时,会出现此错误:
错误:无法加载请求的资源。 libcurl返回错误:来自服务器的空回复
curl code:
$ch = curl_init('http://example.com/image.php');
$fp = fopen('teste,jpg, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
编辑:尝试以下卷曲选择:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)');
curl_setopt($ch, CURLOPT_FILE, $lfile);
网站由000webhost托管,在用不同的代码尝试了一整天后,我不得不使用代理来访问我的网站,因为它阻止了我
编辑2:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"h.mhcdn.net/store/manga/10738/thumb_cover.jpg?v=1476422230");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)');
//die("here1");
$data = curl_exec($ch);
die("here2");
file_put_contents("test.jpg", $data);
die("here3");
//curl_setopt($ch, CURLOPT_FILE, "test.jpg");
尝试上面的代码,但它不会达到“die(”here2“);”(页面不会加载)只有骰子(“here1”);
编辑3:
$url = "http://h.mhcdn.net/store/manga/10738/thumb_cover.jpg?v=1476422230";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)');
//die("here1");
$data = curl_exec($ch);
file_put_contents("local_file.jpg", $data);
die("here2");
无法到达here2,只有here1
编辑4:这就是问题:端口80在000web上被阻止了传出连接:https://www.habschned.com/000webhost-com-blocking-port-80-for-outbound-traffic-no-more-curl/
答案 0 :(得分:0)
我想这很明显,但您是否尝试在浏览器中打开该网址?你能看到这张照片吗?
如果上述答案为YES(最有可能),则远程方很可能阻止脚本获取资源。解决方案是使用cURL尽可能地模拟常规浏览器在HTTP标头方面的行为。
我会从最明显的CURLOPT_USERAGENT和CURLOPT_USERAGENT开始,将它们设置为他们期望的值,你应该没问题。更复杂的访问控制涉及cookie和会话,这更复杂,因为您必须获取引用页面,存储cookie,并在获取资源时发送它。
<强>更新强>
虽然上述情况属实,但这不是提问者所遇到的问题,这个简单的脚本应该按原样运作:
$url = "http://h.mhcdn.net/store/manga/10738/thumb_cover.jpg?v=1476422230";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)');
$data = curl_exec($ch);
file_put_contents("local_file.jpg", $data);