【问题标题】:PHP to retrieve the content of the Password Required pages once i have password?一旦我有密码,PHP 就可以检索需要密码页面的内容?
【发布时间】:2012-07-28 00:15:21
【问题描述】:

我需要检索页面的 html 内容(来源),例如:www.google.com 页面。然后我可以使用:file_get_contentscurl_init 与 PHP。

就像有人在此之前提出的问题一样:
How do I get the HTML code of a web page in PHP?

但对我来说更重要的是,有些页面是需要访问
但我已授予访问权限并且知道密码。

(假设它通过表单询问密码,密码是“abcd”。)

那么我如何使用 PHP 以编程方式读取这些页面?

更新(答案,对我来说):
我找到了curl-setoptsuggested by Bekzat Abdiraimov below 的解决方案。然后现在我在这里详细发布了我在某处找到并修改的代码:

<?php
function curl_grab_page($url, $ref_url, $data, $login, $proxy, $proxystatus){
    if($login == 'true') {
        $fp = fopen("cookie.txt", "w");
        fclose($fp);
    }

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
    curl_setopt($ch, CURLOPT_TIMEOUT, 40);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

    if ($proxystatus == 'true') {
        curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
        curl_setopt($ch, CURLOPT_PROXY, $proxy);
    }

    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_REFERER, $ref_url);

    curl_setopt($ch, CURLOPT_HEADER, TRUE);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

    curl_exec($ch);

    curl_setopt($ch,CURLOPT_URL,$ref_url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);

    ob_start();
    $data = curl_exec($ch);
    ob_end_clean();

    curl_close($ch);
    return $data;
}

/*
 * $auth_processing_url .. is the posted 'action' url in login form like <form method=post action='http://www.abc.com/login.asp'> So it should be like: "http://www.abc.com/login.asp"
 * $url_to_go_after_login .. is the url you want to go (to be redireced) after login
 * $login_post_values .. are the form input names what Login Form is asking. E.g on form: <input name="username" /><input name="password" />. So it should be: "username=4lvin&password=mypasswd"
 */
echo curl_grab_page($auth_processing_url, $url_to_go_after_login, $login_post_values, "true",  "null", "false");
?>

【问题讨论】:

    标签: php curl permissions passwords file-get-contents


    【解决方案1】:

    使用卷曲 curl_setopt ( 资源 $ch , int $option , 混合 $value )

    option = CURLOPT_HTTPAUTH
    value = choose auth type (CURLAUTH_BASIC, ...)
    

    http://www.php.net/manual/en/function.curl-setopt.php

    【讨论】:

    • 是的,我发现curl-setopt 是正确的解决方案。即使您没有发布代码,我也将其设置为答案。不过没关系,我发了。谢谢!! ;)
    【解决方案2】:

    看看使用 Cookie Jar。

    当您第一次进行身份验证时,存储您的身份验证的“Cookie”会丢失(假设您尚未使用 Cookie Jar),因此您发出的下一个请求不会知道您已登录。

    因此,您需要使用 Cookie Jar 来存储身份验证 cookie。

    http://www.electrictoolbox.com/php-curl-cookies/

    【讨论】:

      【解决方案3】:

      这取决于所需的身份验证类型。如果它是广泛使用的 Basic Auth 类型,则它是添加到请求中的一个微不足道的标头。你可以看到技术细节well explained at Wikipedia。要使用file_get_contents 向请求添加标头,请使用$context parameter,其用法通过示例here 进行说明。

      【讨论】:

        猜你喜欢
        • 2011-07-02
        • 1970-01-01
        • 2011-08-29
        • 1970-01-01
        • 2013-12-22
        • 2022-01-18
        相关资源
        最近更新 更多