Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用php curl从youtube URL中获取html?_Php_Curl_Web Scraping - Fatal编程技术网

如何使用php curl从youtube URL中获取html?

如何使用php curl从youtube URL中获取html?,php,curl,web-scraping,Php,Curl,Web Scraping,我想获得Youtube URL(https)的源代码,它类似于我们在浏览器中的“查看页面源代码”选项中看到的内容 下面是我的php代码-(index.php) 网址: 它适用于其他URL,但不适用于任何youtube URL。为什么?您可以尝试以下方法: <?php function getSSLPage($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, false); curl_seto

我想获得Youtube URL(https)的源代码,它类似于我们在浏览器中的“查看页面源代码”选项中看到的内容

下面是我的php代码-(index.php)


网址:


它适用于其他URL,但不适用于任何youtube URL。为什么?

您可以尝试以下方法:

<?php
function getSSLPage($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSLVERSION,3); 
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

var_dump(getSSLPage($_POST["url"]));
?>

如果您对卷曲没有坚持,您可以使用:

file_get_contents();
将以字符串形式返回url资源,因此:

echo file_get_contents('https://www.youtube.com/watch?v=fyLGa0E3OXk');
这将打印给定URL的源

由于有关标题的注释而编辑:


您可以传递
file\u get\u contents
一个使用
stream\u context\u create()

创建的上下文资源,var\u dump输出以下内容:-布尔值为false。我刚刚用“”测试了该代码,效果良好。你在尝试什么URL?它也会返回与你的URL相同的结果。我已经使用WAMP服务器托管了相同的页面,有什么我需要为https页面设置的吗?谢谢,这很有帮助。是否可以更改访问文件时传递的标头?我想更改标题中的IP地址,就像我使用rand在上面的函数中所做的那样,以防止多次点击页面并被阻止。谢谢您的更改。现在明白了。我仍然有兴趣知道除了学习新事物之外,我学习的错误。CURLOPT_HTTPHEADER的把戏是毫无意义的,不会“欺骗”他们相信你的请求来自那里……但是为什么呢?它会将一个随机IP作为消息头发送给他们,不是吗?$\u SERVER['REMOTE\u ADDR']提供将请求发送到web服务器的IP地址。这通常是访问者的地址。Mercury再仔细研究一下,试试看。您缺少的是TCP为HTTP提供连接,我认为服务器将忽略您在标头中输入的内容,并使用TCP连接中的详细信息。因此,您的意思是web服务器不考虑在具有网页请求的数据包中传递的标头,而是考虑TCP连接的状态?
echo file_get_contents('https://www.youtube.com/watch?v=fyLGa0E3OXk');