2

我正在尝试下载网页,例如:

http://www.site.com/savings/thispage?OneId=88&SecondId=185

CURL 在此页面上失败;我怀疑是因为与号。如何转义这个 & 以允许下载完成?

错误是Unable to resolve host

4

2 回答 2

2

看看: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();

于 2012-09-12T17:22:54.627 回答
2

如果你正在做类似的事情

<?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'
于 2012-09-12T18:07:08.473 回答