cURL在使用冒号处理URL源时遇到问题

时间:2012-09-01 19:05:05

标签: php curl

使用cURL获取一个php脚本,抓取源名称中包含冒号的url的内容:

$url = 'http://www.awebsite.com/anxml:file:thatoddly:hascolons:allovertheplace:';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$data = curl_exec($ch);

if(curl_errno($ch)) {
   echo 'Curl error: ' . curl_error($ch);
}

curl_close($ch);

我收到了错误。

Could not resolve host: http; nodename nor servname provided, or not known <url here>

我已经仔细检查过网址是否正常工作,但我怀疑cURL会阻塞文件名中的冒号。来源不是我的,所以我不能删除冒号。

还有另外一种解决方法吗?

2 个答案:

答案 0 :(得分:1)

查看man page cURL 有一个 - data-urlencode 标记。

如果只是一个URL不是通过CLI而是通过PHP完成的,那么你可以使用PHP的 urlencode()

答案 1 :(得分:1)

提供商修复了他们的文件,因此我不再需要处理冒号。事实证明我毕竟不正确地使用cURL,而且下面代码的urlencode()可能会有效。

这不行:

    $url = urlencode($url);
    $url = str_replace("http%3A","http:",$url);

    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $data = curl_exec($ch);

这个DID WORK:

    $url = urlencode($url);
    $url = str_replace("http%3A","http:",$url);

    $c = curl_init($url);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
    $data = iconv("UTF-8","ISO-8859-1",curl_exec($c));

希望能帮助别人。