2016-01-23 60 views
0

我運行一個小型網站來處理電腦遊戲,並且希望從toysrus.ie網站獲取一些產品信息,現在的問題是網站看起來是使用一些神祕的發佈格式來加載頁面,它有一個時間戳,我不能在PHP中複製URL中的URL,並且它也使用服務器端cookie。PHP:颳去使用時間戳和可能的服務器端cookies的網站

現在我已經嘗試使用PHP來獲取有問題的頁面加載下面,但只是返回一個。

$url = 'http://www.toysrus.ie/FilterSearchByManufacturer.action?manuId=1668&t=1453585863738'; 

$dom = new DOMDocument('1.0', 'UTF-8'); 
$dom->loadHTML(file_get_contents($url), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); 

我上面通過進入網站,點擊「視頻遊戲」頂級菜單項,然後一旦頁面加載,左側向下滾動下拉框,然後選擇「任天堂得到了$url '這給了我的網址http://www.toysrus.ie/FilterSearchByManufacturer.action?manuId=1668&t=1453585863738

對於t=1453585863738部分,我嘗試使用PHP的time()函數,但沒有運氣,會話在幾秒鐘後仍然超時。即使它確實有效,並且由於t變量問題,我也無法進入下一個產品頁面。

$url = sprintf('http://www.toysrus.ie/FilterSearchByManufacturer.action?manuId=1668&t=%s', time()); 

$dom = new DOMDocument('1.0', 'UTF-8'); 
$dom->loadHTML(file_get_contents($url), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); 

現在,如果有更多的則列出的結果的一個頁面,則同樣的問題出現與t不是一樣time()和會話超時。

t看起來是13個字符長,而time()只返回10個字符。

+0

@ Don'tPanic,謝謝你,這很可能,但我的問題不是爲什麼我不能這樣做,它是要求幫助,看看我是否能夠完成我想要做的事情,正如我所說,這是一個爲本地遊戲集團運營的小型網站,沒有任何大規模或大規模的活動,我可以在沒有它的情況下生活,但如果需要的話。 – llanato

回答

1

我可以做的最好的猜測是這是以微秒爲單位的UNIX時間戳。所以在PHP中,您可以使用floor(microtime(true) * 1000);(而不是time()方法)。

microtime方法以秒爲單位給出時間(包括微秒),因此您必須將其乘以。

所以,你的代碼將成爲繼:

$url = sprintf('http://www.toysrus.ie/FilterSearchByManufacturer.action?manuId=1668&t=%s', floor(microtime(true) * 1000); 

$dom = new DOMDocument('1.0', 'UTF-8'); 
$dom->loadHTML(file_get_contents($url), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); 

這將完美地解釋,因爲1微秒的3個字符的區別是完全千秒。

0

好吧,既然你正在刮,你可以從一個不需要它的頁面獲得時間戳。

點擊圍繞玩具反斗城了一下Video Games頁面後,擁有該網址http://www.toysrus.ie/ToysRUs/Video-Games/1_2097_-1_-1.action

如果湊那個頁面,並查找<h2>Manufacturers</h2>你可以找到option下爲Nintendo作爲

<option title="NINTENDO (98)" value="FilterSearchByManufacturer.action?manuId=1668&amp;t=1453589317567">NINTENDO (98)</option> 

,這將給你需要將時間戳傳遞給其他請求。

相關問題