当前位置: 首页 > 面试题库 >

代理后面有file_get_contents吗?

袁鸿雪
2023-03-14
问题内容

在工作中,我们必须使用代理来基本访问端口80,例如,我们为每个用户拥有自己的自定义登录名。

我的临时解决方法是使用curl基本上通过代理以自己的身份登录并访问所需的外部数据。

我是否可以设置某种高级php设置,以便在内部每次尝试调用类似file_get_contents()内容时都总是通过代理进行?我在Windows
ATM上,所以如果那是唯一的方法,那么重新编译会很麻烦。

我的解决方法是暂时的,原因是我需要一个通用的解决方案并且可以为多个用户使用,而不是使用一个用户的凭据(我曾经考虑过单独请求一个用户帐户来执行此操作,但是密码经常更改,因此需要在整个过程中部署此技术十几个或更多站点)。我基本上不想对证书进行硬编码以使用curl解决方法。


问题答案:

file_get_contents()通过/通过不需要身份验证的代理来使用,应执行以下操作:

(我无法对此进行测试:我的代理服务器需要身份验证)

$aContext = array(
    'http' => array(
        'proxy'           => 'tcp://192.168.0.2:3128',
        'request_fulluri' => true,
    ),
);
$cxContext = stream_context_create($aContext);

$sFile = file_get_contents("http://www.google.com", False, $cxContext);

echo $sFile;

当然,请用适合您的代理替换IP和端口;-)

如果您遇到这种错误:

Warning: file_get_contents(http://www.google.com) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 407 Proxy Authentication Required

这意味着您的代理服务器需要身份验证。

如果代理需要身份验证,则必须添加几行,如下所示:

$auth = base64_encode('LOGIN:PASSWORD');

$aContext = array(
    'http' => array(
        'proxy'           => 'tcp://192.168.0.2:3128',
        'request_fulluri' => true,
        'header'          => "Proxy-Authorization: Basic $auth",
    ),
);
$cxContext = stream_context_create($aContext);

$sFile = file_get_contents("http://www.google.com", False, $cxContext);

echo $sFile;

关于IP和端口,这次也是登录和密码;-)检查所有有效的http选项。

现在,您正在将Proxy-Authorization标头传递给代理,其中包含您的登录名和密码。

并且…应显示该页面;-)



 类似资料:
  • 我试图在工作中使用代理背后的pip。 这篇文章的一个答案建议使用CNTLM。我在另一篇文章中安装并配置了它,但运行的是cntlm。exe-c cntlm。ini-I-Mhttp://google.com给出错误,连接到代理失败,正在退出。 我还尝试了(默认的CNTLM端口),但引发了。显然代理出了问题。 有人知道如何更明确地检查CNTLM是否设置正确,或者是否有其他方法可以完全解决这个问题吗?我知

  • 有谁有幸尝试使用vertx bihind作为公司代理?我已经尝试了我脑海中出现的任何可能的方式来向vertx提供代理信息。到目前为止没有任何效果。 设置环境变量http_proxy=http://mycorporate.proxy.com:8080-运气不好 设置环境变量VERTX_OPTS='-Dhttp.proxy主机=mycorporate.proxy.com-Dhttp.proxy端口=8

  • 我已经按照这里的说明使用minikube安装了一个本地Kubernetes集群。 我受公司委托。因此,我设置了http_proxy和https_proxy-env变量。在命令后启动集群后,我还将的值添加到no_proxy env var。但是,kubectl仍然无法连接到集群。 我想这是因为kubectl不知道no_proxy设置。簇的一个简单的卷曲通过精细。 有什么办法解决这个问题吗?

  • 问题内容: 我有一个在nginx代理后面运行的node.js服务器。node.js在端口3000上运行HTTP 1.1(无SSL)服务器。两者均在同一服务器上运行。 我最近将nginx设置为将HTTP2与SSL(h2)结合使用。似乎HTTP2确实已启用并且正在工作。 但是,我想知道代理连接(nginx <-> node.js)正在使用HTTP 1.1的事实是否会影响性能。也就是说,因为我的内部连接

  • 问题内容: 我使用函数来获取和显示特定页面上的外部链接。 在我的本地文件中,一切正常,但是我的服务器不支持该功能,因此我尝试将cURL与以下代码配合使用: 但是它返回一个空白页。怎么了? 问题答案: 尝试这个:

  • 问题内容: 我试图一起使用以发出POST请求。到目前为止,我的代码: 它工作正常,但是,当发生HTTP错误时,会发出警告: 并返回false。有没有办法: 禁止显示警告(如果发生故障,我打算抛出自己的异常) 从流中获取错误信息(至少是响应代码) 问题答案: http://php.net/manual/en/reserved.variables.httpresponseheader.php