2012-05-02 85 views
0

我正在開發一個在Android環境下的網絡瀏覽器,當我在谷歌搜索,然後我得到谷歌搜索結果列表。這些結果的網址是類似的東西:如何從Google搜索列表中獲取鏈接的*真實*網址?

http://www.google.ca/url?sa=t&source=web&cd=1&ved=0CDUQFjAA&url=http%3A%2F%2Fwww.test.com%2F&ei=yTOhT7yIGcmu6AG29aSfCQ&usg=AFQjCNH21KLjC0CBkjon2DwD_CZ0HAp

這個谷歌的網址給我真實頁:http://www.test.com

谷歌使用該類型的網址來跟蹤其鏈接的人點擊。但是,對我來說,我需要真正的url,那麼有沒有辦法從google重定向網址(http://www.google.ca/url?sa=)獲取真實網址(http://www.test.com)牛逼&源=網絡& CD = 1 & VED = 0CDUQFjAA & URL = HTTP%3A%2F%2Fww ...)

我不想串從長字符串的URL,並提出一些替代品來獲得真正的頁面的URL,因爲它不是做一個可靠的方法,因爲我將取決於谷歌URL結構,也許他們會改變它們的參數名稱在未來,所以我的方法不會在這種情況下工作...

所以,我想知道是否有辦法知道什麼URL有重定向鏈接發送給我

在此先感謝。

回答

2

如果你仔細看看,Google會返回類似http://www.google.ca/url?xxx=...&yyy=...&url=real_url&zzz= ...也就是說,真正的URL位於Google返回的url的url GET參數中。您只需解析google返回的網址 - 真實網址將位於響應的url GET參數中。別忘了在上面做url_decode

做的另一種方法是把完整的URL,谷歌的回報,做HTTP GET就可以了。您應該收到301或302重定向。從該響應中,讀取location標頭的值 - 這將是您的真實URL。

+0

是找你的權利,但是,正如我在我的文章中說,我不想使用此解決方案,因爲我不得不依賴谷歌,我的意思是,如果谷歌例如決定改變參數名: ..&URL = real_url&...這個名字:..&GURL = real_url&...我的方法不會在這種情況下工作,因爲什麼我應該做的是從這個詞「與URL」 –

+0

提取的子串@AlaouiGhita它不是一個真正的子字符串提取,但我仍然聽到你。然而,你真的可以做的不多。如果這是谷歌回報...首先,你如何將查詢發送到谷歌? –

+0

爲您的問題,我不發送查詢谷歌,我有一個網頁瀏覽器,我進入我的地址欄google.com,當我得到的網站,我搜索「東西」,我得到谷歌頁面的結果,當我點擊其中一個結果鏈接,我去結果頁面,但這個網頁的網址是「長谷歌網址」,以便我的瀏覽器顯示在地址欄中,但我希望它只顯示我地址欄中的真實網址 –

0

請記住,谷歌可能會改變其提供的鏈接,簡單地使用在搜索結果中的網站的「真實」的網址。

覆蓋可預見的未來穩健的方法是:

  1. 檢查,如果該鏈接的包含谷歌或沒有,如果沒有,它如果域可能是「真實」的URL
  2. 包含谷歌。 *,嘗試從GET參數獲取URL並取消其值,然後檢查它是否是有效的URL。
  3. 如果所有的失敗,然後通過各種手段調用鏈接並檢查location頭。

如果你能夠記錄什麼時候失敗,你可以檢查出了什麼問題,爲什麼。

相關問題