【发布时间】:2015-12-25 14:46:48
【问题描述】:
我正在开发一个 php 应用程序。我正在使用 wamp 并且我支持公司代理。我正在使用cntlm 来验证NTLM。我需要 curl google geocoding api,为此我使用了以下有效设置:
curl_setopt($ch,CURLOPT_PROXY, '127.0.0.1:3128');
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
我想找到一种方法来避免为 CURL 设置这些选项。我相信我可以使用 Apache 设置,但我不确定。我需要找到这个解决方案的原因是:
- 在生产环境中不会有这样的代理(目前上述选项仅在环境变量设置为 DEV env 时使用,但仍然:这不是最佳解决方案)
- 如果我想使用 3rd 方 SDK(例如 facebook php sdk),它们在内部使用 CURL,但它们不一定公开更改 CURL 选项的方法(例如 facebook sdk 没有)。我不想更改 SDK 源代码以适应我的代理
我尝试了什么:
到目前为止,我在 apache 上打开了 proxy_module,并在 httpd.conf 中添加了以下行,但没有成功
ProxyRemote * http://127.0.0.1:3128
我仍然无法访问互联网。我google了很多,但我找不到解决方案,有什么想法吗?
我可以找到很多人在谈论同样的问题,但我没有找到任何全面的解决方案,因此我提出了赏金。
我发现了什么:
我在其中找到了this bug:但我不确定这是否适用于 curl,无论如何我找不到如何修改 php.ini
[2010-12-20 14:03 UTC] jani@php.net -总结:改变默认的http-wrapper +总结:添加 php.ini 选项以设置包装器的默认代理 -包:功能/更改请求 +Package:流相关 -PHP版本:5CVS +PHP 版本:*
和
[2011-04-05 11:29 UTC] play4fun_82 at yahoo dot com 嗨,我有 同样的问题。我的解决方案是通过代理服务器与cntml 隧道工具。你配置cntml代理转发http请求 在端口上的本地主机上接收到正确的目的地 身份验证。
在梨中你只需配置
pear config-set http_proxy 127.0.0.1:3128
3128 - 是cntlm中配置的端口(可以是任何其他空闲端口)。
非常感谢
【问题讨论】:
-
虽然我无法证明这一点,但我怀疑这是不可能的(或者至少 - 是不可取的),因为根据调用 PHP 的方式,您会得到不同的结果。命令行中的 PHP 不 依赖于任何 Apache 设置;从 Apache 提供的 PHP 脚本是否可以访问 Apache 设置的某些设置。
-
好的,那么可以通过PHP设置吗?环境变量?安装与我的代理进行 apache/php 对话的 3rd 方应用程序?
-
奇怪的是,在命令行上使用
set http_proxy=http://192.168.61.25:3128设置环境变量http_proxy 可以完美地与PHP 中的cURL 配合使用;如果它是通过SetEnv http_proxy http://192.168.61.25:3128在 Apache 环境中设置的,它存在,但被忽略。 -
谢谢,你能补充更多细节吗?我尝试在终端中设置 http_proxy,但它仍然无法正常工作。我应该在“哪里”运行命令?
-
我在 DOS 窗口中这样使用它:
C:\Program Files\xampp\htdocs\test>set https_proxy=https://192.168.61.25:3128和C:\Program Files\xampp\htdocs\test>"\Program Files\xampp\php\php" curltest.php。但是命令行可能不是你想要的。