2012-08-23 37 views
0

我試圖從網站獲取json數據。在第一個鏈接中,它返回空白。 但在第二個,它返回json。如何從外部文件獲取有效的json?

有人知道我該怎麼做才能從第一個鏈接獲取json數據?

訪問之前這段代碼,請登錄在此鏈接: https://loginfree.globo.com/login/438 用戶:[email protected] 通:cartoletasfc

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 

<body> 
<iframe src="http://cartolafc.globo.com/time/claudioivp-allianz/atletas.json?rodada_id=12"></iframe> 
<?php 
$file = json_decode(file_get_contents("http://cartolafc.globo.com/time/claudioivp-allianz/atletas.json?rodada_id=12")); 

print_r($file); 

echo "casa"; 
?> 

<iframe src="http://cartolafc.globo.com/mercado/filtrar.json?page=1&order_by=preco&clube_id=277"></iframe> 
<?php 
$file = json_decode(file_get_contents("http://cartolafc.globo.com/mercado/filtrar.json?page=1&order_by=preco&clube_id=277")); 

print_r($file); 

echo "casa"; 
?> 
</body> 
</html> 
+0

對不起,我的答案,我讀了你的文章兩次,仍然沒有得到它。我顯然有一個糟糕的夜晚。 –

+0

我仍然不明白爲什麼我們需要登錄到該網站。你知道PHP是服務器端,不能使用瀏覽器憑證嗎? aff tinha que ser desse cartolafc。 – Delta

回答

1

那麼顯然第一個JSON URI要求用戶在登錄網站,否則它將您重定向到主頁,第二個似乎對所有人開放。

我在這裏看到的唯一解決方案是使用curl(或任何其他方法)來模擬瀏覽器,並按照該網站的登錄過程發送您的登錄名,密碼和任何其他需要的信息。然後你可以捕捉到它會產生的cookies。獲取cookie後,您可以保存並保存在cookiejar文件或數據庫中。

與這些Cookie,你就可以以檢索JSON文件,您可以通過使用一個stream_context對象通過file_get_contents給他們,或者如果你正在使用curl存在CURLOPT_COOKIECURLOPT_COOKIEJAR

當然其中cookies將會過期。只需設置一個驗證過程,即在存儲過期的情況下獲取新的Cookie。

如果這個json文件的內容沒有以較高的頻率更新,或者如果用戶不立即獲取這些更新並不重要,那麼您可以在服務器上保留這個json文件的副本,而不受任何訪問限制。

這將是愚蠢的,但萬一這個域名是YOURS(或者你有權訪問它),只需在該文件中刪除登錄驗證?

+0

感謝您的回覆。 請登錄以下鏈接:https://loginfree.globo.com/login/438用戶:[email protected]通過:cartoletasfc 登錄後,直接訪問鏈接:http://cartolafc.globo.com /time/claudioivp-allianz/atletas.json?rodada_id=12 要通過瀏覽器訪問,那就OK了。問題是通過file_get_contents =/ – claudioivp

+1

(只是在他的語言中解釋上述內容)來檢索它。Amigo,foi oq eu expliquei na resposta acima,esse arquivoaírequerautorizaçãopra ser acessado,essaautorizaçãoéverificada por meio de cookies que o navegador envia para o site depois de vc fazer登錄。 Pelo PHPvocênãotem a acesso a esses cookies pois elesestãono navegador dousuário。 Entãovc tem q dar um jeito de pegar esses cookies no lado do servidor e depois envia-los no'file_get_contents' por meio de um objeto'stream_context'。 Ouentãosimplesmente mantenha uma copia do arquivo json no seu servidor。 – Delta

+0

哇..很好..很好的解釋!真的感謝! – claudioivp