0

我试图从网站获取 json 数据。在第一个链接中,它返回空白。但在第二个中,它返回 json。

有人知道我该怎么做才能从第一个链接获取 json 数据?

在访问此代码之前,请登录此链接: https ://loginfree.globo.com/login/438 用户:cartolaewlfa@gmail.com 密码: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>
4

1 回答 1

1

显然,第一个 json URI 要求用户登录网站,否则会将您重定向到主页,而第二个似乎对所有人开放。

我在这里看到的唯一解决方案是使用 curl(或您想要的任何其他方法)模拟浏览器并遵循该网站的登录过程,发送您的登录名、密码和它需要的任何其他信息。然后,您可以捕获它将生成的 cookie。获得 cookie 后,您可以将其保存在 cookiejar 文件或数据库中。

使用这些 cookie,您将能够检索 json 文件,您可以file_get_contents使用stream_context对象通过 a 发送它们,或者如果您使用 curl,则可以使用CURLOPT_COOKIEandCURLOPT_COOKIEJAR

当然,这些 cookie 会过期。只需设置一个验证过程,如果存储的 cookie 已过期,它将在其中获取新的 cookie。

如果此 json 文件的内容没有以高频率更新,或者如果用户立即获取这些更新并不重要,您可以在您的服务器中保留此 json 文件的副本,而无需任何访问限制。

这很愚蠢,但如果该域是您的(或者您可以访问它),只需删除该文件中的登录验证?

于 2012-08-23T04:38:46.153 回答