0

使用 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>

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

还有其他方法吗?

4

2 回答 2

2

提供者修复了他们的文件,所以我不必再处理冒号了。事实证明,我毕竟不正确地使用了 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);

这确实有效:

    $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));

希望能帮助别人。

于 2012-09-06T04:59:58.777 回答
0

查看手册页cURL有一个--data-urlencode标志。

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

于 2012-09-01T21:30:12.093 回答