PHP Curl CURLOPT_IPRESOLVE

13
我一直在开发一个使用 Facebook Graph API 进行身份验证的 Facebook 应用程序,最近 Facebook 升级到 IPv6,而我的网络不支持 IPv6,因此我的所有调用都开始返回“主机无法访问”错误。我在 Facebook bug 上搜索后发现,我们仍然可以使用 CURL CURLOPT_IPRESOLVE 强制请求 Facebook 使用 IPv4。
现在,当我尝试使用Curl发送请求到Facebook Graph API时,出现以下提示:Notice: Use of undefined constant CURLOPT_IPRESOLVE - assumed 'CURLOPT_IPRESOLVE'
我想知道如何启用对该常量的支持,或者如何在 PHP 中禁用 IPv6 支持,以便我可以使用 IPv4 发送请求到 Facebook Graph API。
以下是我的代码:
    $url = ("https://graph.facebook.com/me/access_token?tokrn");
        $c = curl_init();
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($c, CURLOPT_URL, $url);
        curl_setopt($c, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 
        $contents = curl_exec($c);
        $err  = curl_getinfo($c,CURLINFO_HTTP_CODE);
        curl_close($c);

谢谢


哈哈,这里真的有人很讨厌我,每个问题都被投了-1分,继续加油吧孩子... - TilalHusain
1
非常感谢您发布这个问题!它解决了我的超时问题。 - Steven
1个回答

12

检查您的curl版本

CURLOPT_IPRESOLVE自curl 7.10.8起可用。

尝试此示例代码进行测试

<?php

    $version = curl_version();

// These are the bitfields that can be used 
// to check for features in the curl build
$bitfields = Array(
            'CURL_VERSION_IPV6', 
            'CURLOPT_IPRESOLVE'
            );


foreach($bitfields as $feature)
{
    echo $feature . ($version['features'] & constant($feature) ? ' matches' : ' does not match');
    echo PHP_EOL;
}

提醒一下:http://gcov.php.net/PHP_5_3/lcov_html/curl/interface.c.gcov.php


4
顺便提一下,注意,CURLOPT_IPRESOLVE 及其相关常量仅在 PHP 5.3 及更新版本中定义。如果您正在运行 5.2 版本,则这些常量尚不可用,即使您的 libcurl 版本支持它(如 @Venu 所指出的 7.10.8)。此外,即使您手动定义这些常量(define('CURLOPT_IPRESOLVE', 113); define('CURL_IPRESOLVE_V4', 1);),PHP 也会忽略它,正如 Venu 链接到的源代码中的 static int _php_curl_setopt() 函数所示。 - Joe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接