我们有一个网站的镜像,使用相同的域名但不同的IP地址 - 用于在全球进行缓存。
理论上,要检查镜像是否正常工作,我们可以使用:
但是当我尝试登录时,它就无法正常工作了。
我能保留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地址和主机组合吗?或者我需要循环重定向吗?