百度空間 不接受Google.com(.tw)的referer

這一陣子從Google查資料遇到一個惱人的問題
只要是點到一些在百度空間(hi.baidu.com)的文章
全都跳回首頁(http://hi.baidu.com/index/)
一開始以為是該文章已經被刪除或者該作者帳號被停封
沒多想只好改看庫存頁面了

但是這個問題不斷的發生
剛剛測試發現,如果直接貼上網址進入卻可以正常瀏覽!
馬上就想到了應該是referer的問題

就利用這個機會來簡單示範一下C++Builder中使用Indy HTTP的方法

首先建立一個VCL Form Application(請參考C++Builder 教學:建立第一個視窗應用程式)
Form1上加入2個TButton、2個TEdit、3個TLabel和一個TIdHTTP(位於Indy Clients分類)
配置如圖
baidu1.png

記得IdHTTP1HandleRedirect設定為True,這個步驟很重要!

加入Button1Button2OnClick事件

Unit1.cpp
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Label1->Caption = "Referer=www.google.com";
IdHTTP1->Request->Referer = "www.google.com";
IdHTTP1->Get("http://hi.baidu.com/hyeiong/item/61c6fc11eeddd3ea9913d65a");
Edit1->Text = IdHTTP1->Request->URL;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Label2->Caption = "Referer=";
IdHTTP1->Request->Referer = "";
IdHTTP1->Get("http://hi.baidu.com/hyeiong/item/61c6fc11eeddd3ea9913d65a");
Edit2->Text = IdHTTP1->Request->URL;
}
//---------------------------------------------------------------------------

編譯後執行看看結果...
baidu.png

果不其然,和預料中的一樣
原來進到百度空間的referer只要是www.google.comwww.google.com.tw
就會被302 Redirect/index

真是...好邪惡啊!

你也可以將Referer設成Yahoo、Bing等其他搜尋引擎看看結果如何
目前只有測那兩組黑名單會這樣就是了
柯P怎麼說?