我正在尝试使用 cURL 将 facebook api 提供的图像 url 转换为 base64 格式。
api 提供了这样的 url:
https://fbcdn-sphotos-g-a.akamaihd.net/hphotos-ak-xfp1/v/t1.0-9/p180x540/72099_736078480783_68792122_n.jpg?oh=f3698c5eed12c1f2503b147d221f39d1&oe=54C5BA4E&__gda__=1418090980_c7af12de6b0dd8abe752f801c1d61e0d
问题是该 url 仅适用于 oh、oe 和gda参数包含在url字符串中,没有直接的img url。删除参数会将您发送至 Facebook 错误页面。
使用参数化的 url,我的curl_exec 无法获取正确的图像数据。有没有办法从facebook获取base64数据,或者我可以做些什么来访问给定参数化url的纯图像url?
这就是我的解码脚本的样子:
header('Access-Control-Allow-Origin: *');
$url = $_GET['url'];
try {
$c = curl_init($url);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 3);
$result = curl_exec($c);
curl_close ($c);
if(false===$result) {
echo 'fail';
} else {
$base64 = "data:image/jpeg;charset=UTF-8;base64,".base64_encode($result);
echo $base64;
}
} catch ( \ErrorException $e ) {
echo 'fail';
}
为了解决您的特定问题,您的脚本可能会失败,因为所需的oh
, oe
, __gda__
参数在 GET 请求期间被分离,因此不包含在$_GET['url']
.
确保您使用的是 URL 编码字符串,以便任何未编码的字符串&
字符不作为分隔符处理。然后在将字符串传递给 cURL 之前对其进行解码。
...
$url = urldecode($_GET['url']);
...
对于任何好奇的人,您仍然可以从任何一个旧版 CDN 加载任何 Facebook 图像,而无需新参数:
https://scontent-a-iad.xx.fbcdn.net/hphotos-frc3/
https://scontent-b-iad.xx.fbcdn.net/hphotos-frc3/
https://scontent-c-iad.xx.fbcdn.net/hphotos-frc3/
只需将原始图像文件名附加到 URL 即可et voila.
免责声明:我不知道这个小技巧能持续多久,所以不要在生产中任何重要的事情上使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)