2

これが私が今得たコードです(ドメインとサブドメイン名を変更しました):

<?php
$agent = "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16";
$headers = "Expect:";
$postdata = "username=test&password=test&ref=".base64_encode(md5(time().".com"))."&session=s".md5(time());
$login="http://subdomain.mydomain.com/login.php";
$grab="http://subdomain.mydomain.com/index.php";
function login($url,$data){
        $fp = fopen("cookie.txt", "w");
        fclose($fp);
        $login = curl_init();
        curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt");
        curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt");
        curl_setopt($login, CURLOPT_TIMEOUT, 40000);
        curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($login, CURLOPT_URL, $url);
        curl_setopt($login, CURLOPT_USERAGENT, $agent);
        curl_setopt($login, CURLOPT_COOKIESESSION, true);
        curl_setopt($login, CURLOPT_FOLLOWLOCATION, TRUE);
        curl_setopt($login, CURLOPT_POST, TRUE);
        curl_setopt($login, CURLOPT_POSTFIELDS, $data);
        ob_start();
        return curl_exec ($login);
        ob_end_clean();
        curl_close ($login);
unset($login);
}                                
function grab_page($site){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_USERAGENT, $agent);
        curl_setopt($ch, CURLOPT_TIMEOUT, 40000);
        curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
        curl_setopt($login, CURLOPT_COOKIESESSION, true);
        curl_setopt($ch, CURLOPT_URL, $site);
        ob_start();
        return curl_exec ($ch);
        ob_end_clean();
        curl_close ($ch);
}
function grab_subpage($site){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_USERAGENT, $agent);
        curl_setopt($ch, CURLOPT_TIMEOUT, 40000);
        curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
        curl_setopt($login, CURLOPT_COOKIESESSION, true);
        curl_setopt($ch, CURLOPT_URL, $site);
        ob_start();
        return curl_exec ($ch);
        ob_end_clean();
        curl_close ($ch);
}
function post_data($site,$data){
        $datapost = curl_init();
        curl_setopt($datapost, CURLOPT_URL, $site);
        curl_setopt($datapost, CURLOPT_TIMEOUT, 40000);
        curl_setopt($datapost, CURLOPT_HEADER, TRUE);
        curl_setopt($datapost, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($datapost, CURLOPT_USERAGENT, $agent);
        curl_setopt($datapost, CURLOPT_POST, TRUE);
        curl_setopt($datapost, CURLOPT_POSTFIELDS, $data);
        curl_setopt($datapost, CURLOPT_COOKIEFILE, "cookie.txt");
        ob_start();
        return curl_exec ($datapost);
        ob_end_clean();
        curl_close ($datapost);
        unset($datapost);
}
login($login, $postdata);
echo grab_page($grab);
?>

OK、それで... http://subdomain.mydomain.com/から任意のページに移動すると、このコードは正常に機能しますが、 http://anothersubdomain.mydomain.com/からページを取得しようとすると、ドロップして表示されます白いページ。var_dump(grab_page($grab)); string(0) "" をエコーし​​ます。何が問題なのか、そのページにアクセスできない理由がわかりません。私は今一週間グーグルで調べていて、たくさんの方法を試しましたが、何もうまくいきませんでした。

前もって感謝します。

4

1 に答える 1

0

CURLOPT_COOKIEJARは、ハンドルを閉じるときに Cookie を保存する必要があるため、保存された Cookie がある場合は、Cookie ファイルを確認してください。

ログイン関数でこのコードを変更します。

    ob_start();
    return curl_exec ($ch);
    ob_end_clean();
    curl_close ($ch);

に:

$response_data = curl_exec($ch);
curl_close($ch);
return $response_data;
于 2012-10-22T08:51:18.680 に答える