Laravel 5 PHP Domdocument 400 错误请求

Laravel 5 PHP Domdocument 400 Bad request

我得到一个file_get_contents(https://soundcloud.com/50_cent/im-the-man-ft-sonny-digital): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request

我想使用 domdocument laravel 5.1 从 soundcloud url 中获取标题和内容 ID url。

它在 youtube url 和 vimeo url 上运行良好,但在 soundcloud 上无法运行。

我正在使用的 url 是: https://soundcloud.com/50_cent/im-the-man-ft-sonny-digital 仅供测试。

这是我获取标题和内容 ID 的代码:

                $doc = new \DOMDocument();
                $doc->loadHTML(file_get_contents($input_url));
                $title = $doc->getElementsByTagName("title")->item(0)->nodeValue;

                $tags = get_meta_tags($input_url);
                $link_id = $tags['content'];
                DB::table('content_add')->insert([
                    [
                        'url' => $input_url,
                        'title' => $title,
                        'link_id'=> $link_id,
                        'type' => $type,
                        'user_id'=> Auth::id(),
                        'created_at' => Carbon::now(),
                    ],
                ]);

最后我只是将它添加到数据库中。 此外,在使用 urlencode() 时出现此错误 file_get_contents(https%3A%2F%2Fsoundcloud.com%2Fgracedmusic%2Fhello-adele): failed to open stream: No such file or directory

我做错了什么?

如果您创建一个设置为 truestream context for the file_get_contents and pass the ignore_errors 选项,也许会有帮助。

$doc = new \DOMDocument();
$input_url = "https://soundcloud.com/50_cent/im-the-man-ft-sonny-digital";
$options = array(
    'http' => array(
        'ignore_errors' => true,
        'user_agent' => $_SERVER['HTTP_USER_AGENT']
    )
);

$context = stream_context_create($options);
$doc = new \DOMDocument();
@$doc->loadHTML(file_get_contents($input_url, false, $context));
$title = $doc->getElementsByTagName("title")->item(0)->nodeValue;

然后你可以通过检查属性来获取meta标签。例如,如果您想要 'twitter:app:url:googleplay' 属性:

中的号码
$link_id = '';
$startsWith = 'soundcloud://sounds:';

foreach ($doc->getElementsByTagName("meta") as $meta) {
    if ($meta->hasAttribute('property') && $meta->getAttribute('property') === 'twitter:app:url:googleplay') {
        $link_id = $meta->getAttribute('content');
        if (substr($link_id, 0, strlen($startsWith))) {
            $link_id = substr($link_id, strlen($startsWith), strlen($link_id));
            break;
        }
    }
}