使用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会阻塞文件名中的冒号。来源不是我的,所以我不能删除冒号。
还有另外一种解决方法吗?
答案 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));
希望能帮助别人。