PHP中能否禁用DNS查询?我有IP地址和主机名。

3
我们有一个网站的镜像,使用相同的域名但不同的IP地址 - 用于在全球进行缓存。
理论上,要检查镜像是否正常工作,我们可以使用:
$request = new HttpRequest();
...
// IP address of mirror
$request->setUrl('http://xxx.xxx.xxx.xxx');
$request->setHeaders(array('host' => 'domainname.com'));
...
$request->send();

但是这会产生一个错误,提示“'HttpRequestException' with message 'Couldn't resolve host name; ...'”。

由于我们已经知道IP地址和主机名,所以有没有办法在PHP中禁用DNS查找?或在http请求头中禁用?

注意:

我需要进行登录并使用cookies,因此不能使用ping。另外网站需要认为它是正确的域,这就是为什么我在头部使用“Host”的原因。

更新 1:

尝试将HttpRequest替换为curl,但是结果出现了相同的错误消息:

$curl = curl_init()
...
curl_setopt($curl, CURLOPT_URL, 'http://xxx.xxx.xxx.xxx');
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Host: domainname.com'));
...
if (!curl_exec($curl)) {
    echo curl_error($curl);
    // Output is 'Couldn't resolve host 'domainname.com'
}

更新2:

啊...看起来是因为重定向的原因。我还有以下设置:

curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);

这个命令可以在命令行中使用

curl --header "Host: domainname.com" http://xxx.xxx.xxx.xxx

但是当我尝试登录时,它就无法正常工作了。
curl --header "Host: domainname.com" --location --data "username=username&password=password" http://xxx.xxx.xxx.xxx/login.php

我理解

curl: (6) Couldn't resolve host 'domainname.com'

我能保留ip地址和主机组合吗?或者我需要循环重定向吗?

为什么使用主机头?只用ping不就行了吗?在最坏的情况下,可以在80端口上进行TCP-IP请求。 - Boris Ivanov
谢谢Boris,但我也必须登录 - 我先登录,然后查看页面是否存在 - 此外,网站只能使用正确的域名而非IP地址才能正常工作。 - Russell England
1个回答

1
我不清楚HttpRequest,但你可以尝试像这样使用CURL: PHP cURL无法查看/etc/hosts文件 只需将URL设置为IP地址,Host标头设置为域名,就可以按需要工作了。

谢谢Serge,我认为curl可能是答案-刚刚看了一下curl与httprequest的比较 https://dev59.com/A3NA5IYBdhLWcg3wrf43 - 看起来httprequest无论如何都使用curl... - Russell England

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接