我想从api下载图片,当你访问这样的网址时,它会返回一种'.jpg'。
https://www.foo.com/getimage.php?id=??
我发现该脚本接受编码id
,但仅使用base64_encode
,所以我尝试这样做。
<?php
$ch = curl_init();
for($i = 1; $i <= 10; $i++) {
$ch = curl_init();
$id = base64_encode($i);
curl_setopt($ch,CURLOPT_URL,"https://www.foo.com/getimage.php?id=$id");
if(curl_exec($ch)===false){
file_put_contents('downloads/' . base64_decode($id) . '.jpg', $ch);
}
}
curl_close($ch);
你认为我的错误是什么。
答案 0 :(得分:0)
这适用于HTTP
连接。您需要一些其他设置才能使用HTTPS
。
代码中注释了一些重要的注释。
<?php
for($i = 1; $i <= 10; $i++) {
$ch = curl_init();
$id = base64_encode($i);
curl_setopt($ch,CURLOPT_URL,"https://www.foo.com/getimage.php?id=$id");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return data as string
// disable peer verification
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
// disable host verification
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// spoof a real browser client string
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
$output = curl_exec($ch); // capture data into $output variable
if( $output != false){
file_put_contents('downloads/' . base64_decode($id) . '.jpg', $output );
}
curl_close($ch);
}
CURLOPT_RETURNTRANSFER
TRUE以将返回值作为字符串返回 curl_exec()而不是直接输出。
CURLOPT_SSL_VERIFYPEER
FALSE阻止cURL验证对等方的证书。备用 可以使用指定要验证的证书 可以使用CURLOPT_CAINFO选项或证书目录指定 CURLOPT_CAPATH选项。
CURLOPT_SSL_VERIFYPEER
FALSE停止cURL验证证书已发给 我们所连接的实体。