我正在从一个网站(比如 x.com)获取我的应用程序的数据。我使用 php 函数 file_get_contents() 来获取数据。可以肯定的是,我的服务器的 ip 地址将显示在 x.com 的日志中。有没有办法在不使用代理的情况下隐藏我的服务器的 IP?
如果我有代理,如何将它与 file_get_contents() 一起使用?
我需要在 HTTP POST 和 HTTP GET 方法中发送请求
我正在从一个网站(比如 x.com)获取我的应用程序的数据。我使用 php 函数 file_get_contents() 来获取数据。可以肯定的是,我的服务器的 ip 地址将显示在 x.com 的日志中。有没有办法在不使用代理的情况下隐藏我的服务器的 IP?
如果我有代理,如何将它与 file_get_contents() 一起使用?
我需要在 HTTP POST 和 HTTP GET 方法中发送请求
test.php 使用http://ifconfig.me/ip
从http://www.php.net/manual/en/function.file-get-contents.php修改的代码
<?php
// Create a stream
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n",
'proxy' => 'tcp://221.176.14.72:80',
)
);
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$file = file_get_contents('http://ifconfig.me/ip', false, $context);
var_dump($file);
绝对同意farmer1992。
对于任何file_get_contents
对 SSL + 代理有问题的人,PHP 的 stream_context_create 存在一个已知错误:
https://bugs.php.net/bug.php?id=63519
幸运的是,解决方法很简单。基本上,上下文创建者在将“https”目标 URL 解析为代理和 SSL 配置时会感到困惑。您只需在 SSL 配置中设置SNI_server_name :
$targetUrl = "https://something.com";
$sniServer = parse_url($targetUrl, PHP_URL_HOST);
$params = array('your'=>'post','params'=>'here');
$ctxConfig = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded'."\r\n",
'content' => http_build_query($params),
'proxy' => 'tcp://12.34.56.78:3128',
'request_fulluri' => true
),
'ssl' => array(
'SNI_enabled' => true,
'SNI_server_name' => $sniServer
)
);
$context = stream_context_create($ctxConfig);
file_get_contents($targetUrl,false,$context)
希望这可以节省一些时间!