Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.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 文件\u从url获取内容,只有登录到网站后才能访问该内容_Php_Authentication_Session_Curl_File Get Contents - Fatal编程技术网

Php 文件\u从url获取内容,只有登录到网站后才能访问该内容

Php 文件\u从url获取内容,只有登录到网站后才能访问该内容,php,authentication,session,curl,file-get-contents,Php,Authentication,Session,Curl,File Get Contents,我想做一个php脚本,可以从一个网站捕获一个页面。思考文件获取内容($url) 但是,本网站要求您在访问任何页面之前填写用户名/密码登录表。我设想,一旦登录,网站会向您的浏览器发送一个身份验证cookie,随后的每个浏览器请求都会将会话信息传递回网站以对访问进行身份验证 我想知道如何用php脚本模拟浏览器的这种行为,以便访问和捕获该网站的页面 更具体地说,我的问题是: 我如何发送一个请求 包含我的登录详细信息,以便 网站会在会议结束后回复 信息/cookie 我如何阅读课时 信息/cookie

我想做一个php脚本,可以从一个网站捕获一个页面。思考文件获取内容($url)

但是,本网站要求您在访问任何页面之前填写用户名/密码登录表。我设想,一旦登录,网站会向您的浏览器发送一个身份验证cookie,随后的每个浏览器请求都会将会话信息传递回网站以对访问进行身份验证

我想知道如何用php脚本模拟浏览器的这种行为,以便访问和捕获该网站的页面

更具体地说,我的问题是:

  • 我如何发送一个请求 包含我的登录详细信息,以便 网站会在会议结束后回复 信息/cookie
  • 我如何阅读课时 信息/cookie
  • 我如何传回此会话 信息与每一个结果 请求(文件获取内容,卷曲)到 网站
  • 谢谢。

    图书馆和许多其他图书馆/课程也能做到这一点。
    如果您(出于任何原因)希望通过
    文件获取内容来实现这一点,可以使用设置POST和cookie参数,并读取包括cookie在内的响应头。

    Curl非常适合这样做。除了设置
    CURLOPT_-COOKIEJAR
    CURLOPT_-COOKIEFILE
    选项之外,您不需要做任何特殊的事情。通过从站点传递表单字段登录后,cookie将被保存,Curl将自动在后续请求中使用相同的cookie,如下例所示

    请注意,下面的函数将cookie保存到
    cookies/cookie.txt
    ,以便确保目录/文件存在并且可以写入

    $loginUrl = 'http://example.com/login'; //action from the login form
    $loginFields = array('username'=>'user', 'password'=>'pass'); //login form field names and values
    $remotePageUrl = 'http://example.com/remotepage.html'; //url of the page you want to save  
    
    $login = getUrl($loginUrl, 'post', $loginFields); //login to the site
    
    $remotePage = getUrl($remotePageUrl); //get the remote page
    
    function getUrl($url, $method='', $vars='') {
        $ch = curl_init();
        if ($method == 'post') {
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
        }
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies/cookies.txt');
        curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies/cookies.txt');
        $buffer = curl_exec($ch);
        curl_close($ch);
        return $buffer;
    }
    

    这对我来说仍然很有效。如果对您不起作用,请检查a)您已提供所有必需的表单字段,b)您的cookies.txt文件可写。提示:请仔细查看表单是否包含登录所需的隐藏字段。此方法不再有效。1) 当他们检测到您试图使用此方法登录时,他们现在需要一个captcha字段。2) 表单名称和详细信息已更改。