【问题标题】:php CURLOPT_RESOLVE doesn't workphp CURLOPT_RESOLVE 不起作用
【发布时间】:2018-04-18 20:21:38
【问题描述】:

我在 Centos 6,PHP 5.6.35,

curl 7.59.0 (x86_64-redhat-linux-gnu) libcurl/7.59.0 OpenSSL/1.0.1e zlib/1.2.3 c-ares/1.14.0 libssh2/1.8.0 nghttp2/1.6.0

我正在尝试强制 curl 使用带有 HTTPS 的 IP(我的 LAN 中的网络服务器):

  curl_setopt($ch, CURLOPT_URL, "https://" . $domain . "/");
  curl_setopt($ch, CURLOPT_RESOLVE, array( $domain . ":443:192.168.1.10"));
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
  curl_setopt($ch, CURLOPT_HEADER, true);
  curl_setopt($ch, CURLOPT_NOBODY, true);
  curl_setopt($ch, CURLOPT_VERBOSE, true);
  $output = curl_exec($ch);

它一直连接到 $domain 的真实公共 IP。 我也明白了:

PHP 注意:使用未定义的常量 CURLOPT_RESOLVE - 在 ...中假定为“CURLOPT_RESOLVE”

PHP 警告:curl_setopt() 期望参数 2 很长,字符串在 ...

【问题讨论】:

  • 令人惊讶。在 PHP 5.6.35 源代码中,我们可以看到 cURL >= 7.21.3 的常量声明:github.com/php/php-src/blob/…
  • 你能试试这个值10203 (0x27DB)吗? curl_setopt($ch, 10203, array( $domain . ":443:192.168.1.10"));
  • 使用10203,不再有Notice或Warning,但仍在使用真实IP。
  • print_r(curl_version()); 是否输出相同的版本 (7.59.0)?
  • [version] => 7.59.0, [version_number] => 473856, [age] => 4, [features] => 3113885

标签: php curl


【解决方案1】:

由于某种原因,来自 city-fan 的 curl 7.59 版本不起作用。

我已经用

在 Centos 7 上进行了测试

curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.21 Basic ECC zlib/1.2.7 libidn/1.28 libssh2/1.4.3

它有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 2011-11-03
    • 2012-08-30
    • 2017-05-14
    • 2017-03-11
    • 2011-04-23
    • 2011-09-17
    相关资源
    最近更新 更多