我正在尝试下载网页,例如:
http://www.site.com/savings/thispage?OneId=88&SecondId=185
CURL 在此页面上失败;我怀疑是因为与号。如何转义这个 & 以允许下载完成?
错误是Unable to resolve host
我正在尝试下载网页,例如:
http://www.site.com/savings/thispage?OneId=88&SecondId=185
CURL 在此页面上失败;我怀疑是因为与号。如何转义这个 & 以允许下载完成?
错误是Unable to resolve host
看看:url_encode();
和rawurlencode();
。
返回一个字符串,其中包含除 -_ 之外的所有非字母数字字符。已替换为百分号 (%) 后跟两个十六进制数字和编码为加号 (+) 的空格。它的编码方式与 WWW 表单中发布的数据的编码方式相同,即与 application/x-www-form-urlencoded 媒体类型中的方式相同。这与 » RFC 3986 编码(参见 rawurlencode())的不同之处在于,由于历史原因,空格被编码为加号 (+)。
更新:由于错误是Unable to resolve host
,请确保您的/etc/resolv.conf
文件具有0644
. 这将确保安全并允许 Apache/PHP 读取和解析主机名。
您可以通过调用检查 PHP 和 Apache 是否可以访问 DNS 服务gethostbyname();
如果你正在做类似的事情
<?php
$url = "http://www.site.com/savings/thispage?OneId=88&SecondId=185";
$encoded = urlencode($url);
// use cURL to fetch $encoded
?>
那么您实际上是在要求 cURL 获取http%3A%2F%2Fwww.site.com%2Fsavings%2Fthispage%3FOneId%3D88%26SecondId%3D185
. 这被视为主机名,因为没有“/”字符将主机名与请求路径分开。
你是如何启动 cURL 的?您是在使用PHP 库system()
,还是通过类似或运行它shell_exec()
?您可能需要以不同的方式(或根本不需要)转义它,具体取决于您启动它的方式。
如果您实际上是从命令行运行它(而不是从 PHP 运行),那么类似以下的内容应该可以很好地完成:
curl 'http://www.site.com/savings/thispage?OneId=88&SecondId=185'