PHP cURL不适用于 - 在子域中

时间:2013-01-24 10:21:12

标签: php curl

我有一个PHP脚本,我正在尝试获取页面的内容。我正在使用的代码在

之下
$url = "http://test.tumblr.com";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$txt = curl_exec($ch);
curl_close($ch);

echo "$txt";

它现在对我来说很好。我遇到的问题是,如果我将字符串URL更改为

$url = "http://-test.tumblr.com";$url = "http://test-.tumblr.com";

它无效。我知道-test.example.com或test-.example.com不是有效的主机名,但是使用Tumblr它们确实存在。有解决方法吗?

我甚至尝试在另一个php文件上创建标题重定向,因此cURL将首先获得有效的主机名,但工作方式相同。

谢谢

1 个答案:

答案 0 :(得分:0)

带连字符的域名

正如您在上一个关于the allowed characters in a subdomain的问题中看到的那样,-不是用于开始或结束子域的有效字符。所以这实际上是正确的行为。 前一段时间curl mailing list报告了同样的问题,但由于curl遵循标准,因此其网站上实际上没有任何变化。

很可能tumblr知道这一点,因此提供了一些通往同一网站的替代地址。

可能的解决方法

但是,您可以尝试使用nslookup手动查找IP,然后将请求直接发送到此IP(并手动将主机名设置为正确的值)。我没有尝试过,但似乎nslookup能够解析以连字符开头或结尾的格式错误的域名。

卷曲

另外你应该知道,php curl函数应该是curl命令行工具的直接接口,因此,如果你遇到特殊行为,很可能是由于逻辑在curl命令行工具而不是php函数。