1

ページの html コンテンツ (ソース) を取得する必要があります。たとえば、www.google.com ページです。それから私は使用できます:file_get_contentsまたはcurl_initPHPで。

前に誰かが質問したのとまったく同じです:
PHP で Web ページの HTML コードを取得するにはどうすればよいですか?

しかし、それ以上に、一部のページはAccess Requiredです。
しかし、私はアクセスを許可し、パスワードを知っています。

(フォームでパスワードを要求し、パスワードが「abcd」であるとしましょう。)

では、PHP を使用してそのページをプログラムで読み取るにはどうすればよいでしょうか。

更新(私にとっては答え):以下のBekzat Abdiraimovが提案し
た解決策を見つけました。次に、どこかで見つけて変更したコードの詳細をここに投稿しました。curl-setopt

<?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");
?>
4

3 に答える 3

2

curl curl_setopt を使用 ( resource $ch 、 int $option 、 mixed $value )

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

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

于 2012-07-30T10:39:02.887 に答える
0

クッキージャーの使用を見てください。

最初に認証すると、認証を保存する「Cookie」が失われるため(Cookie Jarをまだ使用していない場合)、次に行うリクエストでは、ログインしたことがわかりません。

そのため、認証Cookieを保存するにはCookieJarを使用する必要があります。

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

于 2012-07-30T10:33:19.057 に答える
0

必要な認証の種類によって異なります。広く使用されている基本認証タイプの場合は、要求に追加された簡単なヘッダーです。ウィキペディアでよく説明されている技術的な詳細を見ることができます。を使用してリクエストにヘッダーを追加するには、パラメータをfile_get_contents使用します。この$contextパラメータの使用については、ここで例を示します。

于 2012-07-30T10:33:23.970 に答える