【问题标题】:How to get the referer from remote file_get_contents如何从远程 file_get_contents 获取引用者
【发布时间】:2014-07-04 19:20:50
【问题描述】:

我设置了一个输出 JSON 的 PHP 脚本,如下所示:

<?php
 // ref.php
print json_encode(array('ref' => $_SERVER["HTTP_REFERER"]), JSON_UNESCAPED_SLASHES);
?>

以上代码是该文件中的所有代码。从另一个文件中,我尝试读取如下输出:

<?php
// ref_index.php
$json = file_get_contents('http://localhost/4test/ref.php'); 
$data = json_decode($json);
var_dump($data);
?>

上面的代码返回NULL是因为ref.php没有得到$_SERVER["HTTP_REFERER"]的值,所以当我用任何固定值替换$_SERVER["HTTP_REFERER"]时,比如'blahh blahh`它返回json对象。

我的问题是:如何获得 file_get_contents() 的引用,即它运行以从我的应用程序获取数据的 url。

【问题讨论】:

  • 每个以 HTTP_ 开头的条目都来自 HTTP 请求的标头。如果您没有在请求中向ref.php 发送Referer 标头字段,则不会有$_SERVER["HTTP_REFERER"]
  • $_SERVER 包含调用您的脚本的请求的数据。它与 php 将对您的 ref.php 脚本执行的 http 请求完全无关。这将是一个完全独立/独立的请求。

标签: php json referrer


【解决方案1】:

referrer 使用 HTTP 中的 Origin 标头传输。您需要在 file_get_contents() 调用中设置该标题。为此,您需要使用 stream_context_create() 自定义的 流上下文,并将其作为第三个参数传递给 file_get_contents()

$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Origin: SET REFERRER URL HERE"
  )
);

echo file_get_contents(
    'http://localhost/4test/ref.php',
    false,
    stream_context_create($opts)
);

【讨论】:

  • 哦!因此,通过这种方式,我无法使用 ref.php 对远程网站进行身份验证!换句话说,我计划从注册网站列表中检查引用者值,以便向他们提供数据。是否有任何解决方法,例如 Facebook 与他们的应用程序一起使用?!
猜你喜欢
  • 2011-06-07
  • 1970-01-01
  • 2012-05-18
  • 2014-03-18
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 2011-11-13
  • 1970-01-01
相关资源
最近更新 更多