【问题标题】:Curl an unresolvable host?卷曲一个无法解析的主机?
【发布时间】:2014-11-17 09:45:18
【问题描述】:

我需要从 PHP 网站 Curl 到目标机器无法解析的主机(curl_error 返回(6) couldn't resolve host)。不过,在我的本地机器上它是可以解决的,所以经过一些网络搜索后,我认为这可能是 DNS 缓存问题。
我只有 FTP 访问这个网络服务器,所以我不能restart Apache or edit the r.conf file
我尝试使用从 ping 域获得的 IP 地址进行 Curling,但不幸的是,我需要向子域(例如 api.domain.com)发出请求,并且直接对 IP 地址的请求得到不同的处理。

我曾希望我可以在 Host 标头中指定子域+域(见下文),但这也不起作用。

$curl = curl_init();

$opt = array(
    CURLOPT_URL => 'http://11.22.33.44/handler.php?params=1',
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_HTTPHEADER => array('Host: subdomain.domain.com')
);
curl_setopt_array($curl, $opt);
$output = curl_exec($curl);

【问题讨论】:

  • 你能详细说明这个“行不通”吗?
  • 它不起作用,因为似乎 Host 标头被忽略了。没有它我得到相同的结果。

标签: php curl dns


【解决方案1】:

主机的另一种方法:摆弄(如果您使用足够新的 PHP 版本,显然这是在 5.5 或更高版本中)是使用主机名的“假”条目预先填充 libcurl DNS 缓存,然后您可以在 URL 中使用主机名。

查看 CURLOPT_RESOLVE 选项,该选项似乎在 PHP 文档中记录得很差,但可以在错误跟踪器中找到:https://bugs.php.net/bug.php?id=63488&edit=1

底层 libcurl 选项 CURLOPT_RESOLVE 记录在 curl 网站上。

【讨论】:

  • 确实记录不好,但这看起来很有希望!
  • 不幸的是,使用 CURLOPT_RESOLVE 我仍然得到相同的 Curl 错误。我在那个错误跟踪页面上使用了代码 sn-p——一次使用子域,一次没有子域——但都没有任何明显的效果。
  • 然后仔细研究请求的样子并确保它是正确的,因为这两种方法都应该工作
  • 多亏了这个建议,我才得到了它与主机的合作:摆弄!仍然不知道为什么 CURLOPT_RESOLVE 什么都不做,但如果你没有说 Host 标头也应该工作,我可能已经放弃了!谢谢
猜你喜欢
  • 2020-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
  • 2017-12-11
相关资源
最近更新 更多