ある種のページパーサー(より具体的には、ページ上のいくつかの単語を強調表示する)を作成しようとしていますが、問題が発生しています。curlを使用してURLからページ全体のデータを取得していますが、ほとんどのページはうまく連携していますが、他のページは連携していません。
私の目標は、ブラウザが取得しているのと同じようにすべてのページのhtmlを取得することであり、ブラウザのように匿名で使用しようとしています。つまり、興味のないブラウザのデータを表示するためにログインが必要なページがある場合です。問題は、FirefoxやChromeから通常送信されるようにすべてのヘッダーを設定しても、通常のブラウザから匿名でアクセスできるTwitterやFacebookのページにアクセスできないことです。
ブラウザーをエミュレートしてこれらの側からページを取得する方法はありますか、またはOAuthを使用する必要があります(ブラウザーがそれを使用する必要がない理由を誰かが説明できますか)?
編集
私は解決策を得ました!誰かが問題を抱えている場合は、次のようにする必要があります
。->プロトコルをhttpsからhttpに切り替えてみてください->
URLに/#!/要素がある場合は削除
してください->私のcurl要素 "Accept-Encoding:gzip、 deflate」も問題を引き起こしていました。理由はわかりませんが、今ではすべて問題ありません。
私のコード:
if (substr($this->url,0,5) == 'https')
$this->url = str_replace('https://', 'http://', $this->url);
$this->url = str_replace('/#!/', '/', $this->url);
//check, if a valid url is provided
if(!filter_var($this->url, FILTER_VALIDATE_URL))
return false;
$curl = curl_init();
$header = array();
$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
// -> gives an error: $header[] = "Accept-Encoding: gzip, deflate";
$header[] = "Accept-Language: pl,en-us;q=0.7,en;q=0.3";
$header[] = "Cache-Control: max-age=0";
$header[] = "Connection: keep-alive";
$header[] = "Keep-Alive: 300";
$header[] = "Pragma: "; // browsers keep this blank.
curl_setopt($curl, CURLOPT_HTTPHEADER,$header);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_URL, $this->url);
curl_setopt($curl, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($curl, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($curl, CURLOPT_COOKIESESSION,true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
$response = curl_exec($curl);
curl_close($curl);
if ($response) return $response;
return false;
すべてがクラスに含まれていましたが、コードを非常に簡単に抽出できます。私にとっては、両方(twitterとfacebook)がうまく機能しています。