2

我编写了以下函数,这是我在其他地方使用的代码,并稍作修改以作为函数工作(在函数参数中使用 $url):

function curl2str($url) {
    $cURL = curl_init($url);
    curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($cURL, CURLOPT_CONNECTTIMEOUT, 5);
    $data = curl_exec($cURL);
    curl_close($cURL);
    return $data;
}

我只是想要一个函数将 URL 返回到字符串中,以获得快速简便的 API。我传递给它的 URL 是有效的,并且当我将它放入浏览器时可以正常工作。我这样称呼它:

<?=curl2str("**valid URL here**");?>

出于某种原因,它只是返回错误。我究竟做错了什么?

更新 当我将这个问题的 URL 放入 as$url时,我得到了回复。但是,当我使用在浏览器中运行良好的自定义 URL 并简单地显示目录中的文件列表时,我得到 bool:false。

更新 2 似乎任何域都可以正常工作,除了我试图访问的域。碰巧这是同一服务器上的根域,我从子域运行此脚本,但由于 basedir_restrictions 我无法从子域访问文件夹。所以我写了一个小php来获取文件夹的内容,并将其作为序列化数组输出到浏览器(未安装JSON)。但我根本无法从这个根域得到响应。它在浏览器中运行良好,只是在 cURL 中不行。其他一切在 cURL 中都可以正常工作。

:(

4

2 回答 2

8

在您的函数中尝试此代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
if(curl_errno($ch))
    echo 'Curl error: '.curl_error($ch);
curl_close ($ch);  

注意:curl_errno($ch);如果 cURL 发生任何错误,则返回错误号>0,并用于curl_error($ch);查看 cURL 的错误是什么。

于 2013-08-02T11:06:41.280 回答
4

我使用这个功能:

function curl($url, $cookie = false, $post = false, $header = false, $follow_location = false, $referer=false,$proxy=false)
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FAILONERROR, true);
    curl_setopt($ch, CURLOPT_REFERER, $referer);
    curl_setopt($ch, CURLOPT_HEADER, $header);
    curl_setopt($ch, CURLOPT_PROXY, $proxy);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $follow_location);
    if ($cookie) {
        curl_setopt ($ch, CURLOPT_COOKIE, $cookie);
    }
    if ($post) {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    }
    $response = curl_exec ($ch);
    curl_close($ch);
    return $response;
}
于 2013-08-02T11:18:45.533 回答