我正在尝试下载网页,例如:
http://www.site.com/savings/thispage?OneId=88&SecondId=185
CURL在此页面上失败;我怀疑由于&符号。如何逃避此&符号以允许下载完成?
错误为Unable to resolve host
答案 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();
答案 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'