get file content返回空字符串

时间:2015-11-22 21:38:30

标签: php json api

我试图从这里获取内容:

http://t.c4tw.net/MatchUser?hash_key=563b755ac53a3&json=1

$json = file_get_contents('http://t.c4tw.net/MatchUser?hash_key=563b755ac53a3&json=1');
$obj = json_decode($json);
var_dump($json);

结果

string(0) ""

file_get_contents与其他链接工作正常,有没有办法用php获取这些数据?

2 个答案:

答案 0 :(得分:1)

不幸的是,PHP并不像JS那样支持跨域内容请求,至少开箱即用。要使用URL内容请求,您必须先设置

//  Initiate curl
$ch = curl_init();
// Disable SSL verification
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// Return response as string rather than outputting it directly
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Set cURL url
curl_setopt($ch, CURLOPT_URL, 'http://t.c4tw.net/MatchUser?hash_key=563b755ac53a3&json=1');
// Execute request
$result=curl_exec($ch);
// Close cURL resource
curl_close($ch);

// Dump JSON
var_dump(json_decode($result, true));

在你的php.ini配置文件中。主机默认禁止此操作的常见做法。

另外,请确保您要转储$ obj而不是$ json。

此外,您可以查看PHP的cURL library(类似于JS' ajax),它允许跨域请求。

cURL

var arry = {};
for(var i = 0; i<100; i++){
  arry[i] = i;
}
  for each (var x in arry){
    var div = document.createElement('div');
    div.id = x;
    document.getElementById('body').appendChild(div);
  }

答案 1 :(得分:1)

不建议使用file_get_contents从远程来源获取内容。更正确的方法是使用curl。 Curl可以设置正确的标题,会话,cookie和其他无法为file_get_contents和stream_context_set_default设置的参数

$ch=curl_init();
curl_setopt($ch, CURLOPT_URL,'http://t.c4tw.net/MatchUser?hash_key=563b755ac53a3&json=1');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:42.0) Gecko/20100101 Firefox/42.0');
$curl_response = curl_exec($ch);
curl_close($ch);

$obj = json_decode($curl_response);

var_dump($obj);

结果如下:

object(stdClass)[3341]
public 'twuser_id' => string 'NzU0NDA4MTQwOTU4ODYwNjM3Nw..' (length=28)