卷曲下载网页&符号错误

时间:2012-09-12 17:13:27

标签: php curl

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

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

CURL在此页面上失败;我怀疑由于&符号。如何逃避此&符号以允许下载完成?

错误为Unable to resolve host

2 个答案:

答案 0 :(得分:2)

请查看:url_encode();rawurlencode();

  

返回一个字符串,其中除-_之外的所有非字母数字字符。   已被替换为百分号(%),后跟两个十六进制数字   和空格编码为加号(+)。它的编码方式与之相同   来自WWW表单的发布数据被编码,其方式与中的相同   application / x-www-form-urlencoded媒体类型。这与»   由于历史原因,RFC 3986编码(参见rawurlencode())   空格编码为加号(+)。

更新:由于错误为Unable to resolve host,请确保您的/etc/resolv.conf文件具有0644的权限。这将确保安全性,并允许Apache / PHP读取和解析主机名。

您可以通过调用gethostbyname();

来检查PHP和Apache是​​否可以访问DNS服务

答案 1 :(得分: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 library,还是通过system()shell_exec()之类的方式运行?您可能需要以不同方式(或根本不用)转义它,具体取决于您的启动方式。

如果您实际上是从命令行运行它(而不是从PHP运行),那么类似下面的内容应该可以很好地运行:

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