PHPによるWEBページのダウンロード

自宅サーバー

クラウドにおいてあるデータを自動で読みだそうとスクリプトを組んでも PHPなどの内部コマンドを使うとその挙動から
以下のような「Server: cloudflare」の場合、403 Error か 「Just a moment…」ページ表示でブロックされてしまう。

HTTP/1.1 200 OK
Date: Sat, 18 Oct 2025 05:55:55 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: cloudflare
vary: Accept-Encoding
x-cache: EXPIRED
last-modified: Sat, 18 Oct 2025 04:44:44 GMT
Age: 4927
Cache-Control: max-age=3600
cf-cache-status: HIT
CF-RAY: xxxxxxxxxxxxxx-XXX

ブラウザによるアクセスは許してくれるので、コマンドライン型ブラウザ(?)を外部コマンドとして使うことにした。その関数のメモ

/**
 * WEBページのダウンロード
 * cloudflare対応版
 *
 * @param string $url   ダウンロードしたいURL
 * @param string $ref   Referer
 * @return string       ダウンロードしたページ内容
 */
function CheckUrl(string $url, string $ref="") :string
{
    if ($ref==""){
//        $ref=" -e ". $url;
    } else {
        $ref=" -e " . $ref;
    }
    $ua =" -A \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\"";
    $cmd = 'curl';
    if (file_exists("cookie.txt")){
        $cke=" -b cookie.txt";
    }else $cke="";
    $cmd .=" -i --no-progress-meter -c cookie.txt" . $cke . $ref . $ua ." ". $url;
    exec($cmd, $opt, $return_ver);
    if ($return_ver != 0) $opt=null;
    return implode("\n", $opt);
}

タイトルとURLをコピーしました