我一直在努力弄清楚为什么我在PHP中使用curl
库的页面在我的开发计算机上运行但在远程服务器上失败了。有人怀疑它与curl
是否有SSL支持有关,如one of the comments here所示:
如果您的curl安装没有使用SSL支持进行编译,那么当您试图弄清楚为什么curl_exec()失败或做其他任何事情时,您会在墙上撞到墙头......
因此,我运行this script以确定我的开发计算机和远程服务器是否支持SSL。我的 dev machine 和远程服务器都产生了以下内容(看起来都支持SSL):
CURL_VERSION_IPV6匹配CURL_VERSION_KERBEROS4与CURL_VERSION_SSL匹配不匹配CURL_VERSION_LIBZ匹配
但是,当我从远程服务器(我的脚本失败的那个)的命令行运行curl
时,这是我得到的(即curl
挂起) :
curl -v http://<my-domain>/blog/press-release/
* About to connect() to <my-domain> port 80
* Trying 66.201.45.235...
相同的curl
命令行在我的开发计算机上工作正常,尽管它返回了不同的IP地址:
curl -v http://<my-domain>/blog/press-release/
* About to connect() to <my-domain> port 80 (#0)
* Trying 10.3.1.207... connected
请...请帮帮忙?是否有其他方法可以找出我的开发计算机和远程服务器上安装的curl
之间的差异? 为什么他们会返回不同的地址?
答案 0 :(得分:2)
域名(如my-domain.com
)通过DNS解析为IP地址。
当程序尝试按名称访问网络设备时,操作系统会联系其配置的DNS服务器,并要求其提供与提供的名称对应的IP地址。然后,DNS服务器将使用IP地址(或一组IP地址进行响应 - 可以配置一个名称以解析为多个IP地址)或一条错误消息,其中说“实际上”我找不到名称”。操作系统还将具有hosts file,这是静态配置的域到IP映射的列表。如果主机文件中的请求域匹配,则不会联系DNS服务器,而是使用配置的IP。
公司局域网通常拥有自己的内部DNS服务器来控制内部域,如果它获得该域成员的请求,它将返回该主机的LAN IP地址,而不是WAN IP地址
我对你的问题的猜测是发生了两件事之一:
无论哪种方式,您需要解决的实际问题是您尝试联系的主机不接受来自66.201.45.235
地址的WAN的连接,这是因特网将其IP地址视为。这可能是因为服务器配置,防火墙,NAT或许多其他任何事情。
这可能与SSL无关 - cURL正在尝试连接到端口80,端口80用于未加密的HTTP连接,并且不需要SSL。
您应与网络管理员联系以解决此问题。