【问题标题】:Is it possible to use get_headers after hiding referrer?隐藏referrer后是否可以使用get_headers?
【发布时间】:2013-05-04 22:07:44
【问题描述】:

我正在使用此代码来获取 HTTP 响应:

$url = "http://example.com/";
$headers = get_headers($url);
$header = substr($headers[0], 9, 3);
echo = $header;

效果很好,但我需要隐藏引荐来源网址,所以我使用 http://href.li/,如下所示:

$url = "http://href.li/?http://example.com/";
$headers = get_headers($url);
$header = substr($headers[0], 9, 3);
echo = $header;

无论最终页面的状态如何,都会产生200 OK HTTP 状态代码。是否有可能从最后一页获取标题?或者是否有另一种方法可以在仍然使用引荐来源隐藏服务的同时实现这一目标?

【问题讨论】:

  • href.li 站点不发送重定向。它发送一个包含<meta http-equiv="Refresh"> 标签和调用window.location.replace() 的Javascript 的网页。我认为它甚至不会尝试连接到目标站点,因此它无法报告成功或失败。
  • 可以用curl隐藏referer吗?
  • 编辑标题,不熟悉curl
  • 在PHP手册中查找,这是您想要详细控制时执行HTTP操作的常用方法。

标签: php href referrer get-headers


【解决方案1】:

在这种请求中,您不需要第三方服务来隐藏您的referer,您可以将其设置为您需要的任何内容,但是您不能使用get_headers 函数来实现。您可以使用file_get_contentsstream_context_create 来实现。在你的情况下,我想它会是这样的:

$URL = 'http://example.com/';
$Context = stream_context_create(array(
    'http' => array(
        'method' => 'HEAD',
        'header' => 'Referer: '
    )
));
file_get_contents($URL, false, $Context);
$ResponseHeaders = $http_response_header;

$header = substr($ResponseHeaders[0], 9, 3);
echo $header;

stream_context_create 使用您指定的请求的任何选项创建一个流上下文,file_get_contents 使用该上下文执行请求。然后脚本检查$http_response_header,这是一种魔术变量,在对 HTTP URL 的 HTTP 请求之后填充,它仅在本地范围内可用,即,在您调用发出 HTTP 请求但不是的函数之后,比如说,在之后执行的另一个函数中。 $http_response_header的内容与get_header()函数的结果基本一致。

(您也可以在上面的示例中使用GET,但如果您不需要响应正文,HEAD 只会获取没有正文的标头。顺便说一下,PHP 的get_headers 发出GET请求获取包括主体在内的整个响应,然后将其丢弃。但有时接收服务器或脚本无法处理HEAD 请求,或者与GET 请求相比,执行某些操作不同 - 你应该真正尝试一下,看看有什么用给你。)

【讨论】:

  • 以这种方式隐藏引荐来源网址似乎可行,并且我得到了正确的 HTTP 状态代码,但是我得到了以下 PHP 错误:警告:file_get_contents(403example.com): failed to open stream: HTTP请求失败! HTTP/1.1 403 禁止
  • 在这种情况下,尝试使用GET 请求(只需将HEAD 更改为GET,)可能您调用的服务器或脚本无法处理它。
  • 那么似乎另一台服务器正在阻止来自您的请求,或者只是不喜欢空的 Referer 标头。无论哪种方式,它都是一个有效的 HTTP 请求,通常不会引起任何问题。尝试在 Referer 标头('http' => 'Referer: ' 行)中添加一些您不介意与接收服务器共享的其他 URL,然后看看情况如何。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 2011-02-20
  • 1970-01-01
相关资源
最近更新 更多