在我的localhost
或我的服务器上运行时,我无法加载特定的外部页面。但是,如果我在浏览器中加载页面,它会加载或使用Postman加载它。
我如何解决这个问题以及Spotify如何防止这种情况?
我要加载的内容的网址是this。
<?php
$url="https://embed.spotify.com/?uri=spotify:user:spotify:playlist:4hOKQuZbraPDIfaGbM3lKI";
$page = file_get_contents($url);
echo $page; //returns nothing
$page = get_data($url);
echo $page; //returns nothing with a http code of 0
$url="https://www.google.com";
$page = file_get_contents($url);
echo $page; //returns google
$page = get_data($url);
echo $page; //returns google with a http code of 200
/* gets the data from a URL */
function get_data($url) {
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $data;
}
?>
答案 0 :(得分:1)
尝试将 CURLOPT_POSTFIELDS
设置为true&amp;像这样在CURLOPT_POSTFIELDS
中设置网址参数。请注意,URL会因此更改,因为参数现在位于CURLOPT_POSTFIELDS
。我将params设置为一个名为$post_fields
的数组,因为我发现在调试时这是一种更容易读取的方式。
更新: post
参数不起作用。但是将CURLOPT_SSL_VERIFYHOST
设置为false
以及设置为CURLOPT_SSL_VERIFYPEER
的{{1}}似乎可以帮助我。
这是我清理过的代码版本。删除了你的测试&amp;评论了false
param之前我认为会有所帮助的东西:
post