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
我做错了什么?
如果您创建一个设置为 true
的 stream 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;
}
}
}
我得到一个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
我做错了什么?
如果您创建一个设置为 true
的 stream 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;
}
}
}