作爲一個有點醜陋的黑客讓它工作,你可以添加一個hosts文件別名,或許用一個小時cronjob加強來更新真正的IP--代價是腳本每次實際上只有1個小時改變IP? (我實際上做了幾年,當我面臨類似的問題時,我不認爲我仍然有源代碼,雖然,檢查)
編輯:我沒有原始的cronjob,但它看起來是這樣的:
<?php
declare(strict_types = 1);
$hosts = '/etc/hosts';
assert (is_file ($hosts) && is_readable ($hosts) && is_writable ($hosts), 'need access to ' . $hosts);
$host = 'google.com';
$ip = getIP ($host);
$str = file_get_contents ($hosts);
$start = strpos ($str, '#<wtf_cronjob>');
$end = strpos ($str, '#</wtf_cronjob>');
assert (false !== $start && false !== $end, 'invalid syntax for hosts file!');
$end += strlen ('#</wtf_cronjob>');
$newstr = substr ($str, 0, $start) . '#<wtf_cronjob>' . "\n" . $ip . ' ' . $host . ' ' . "\n" . '#</wtf_cronjob>' . substr ($str, $end);
file_put_contents ($hosts, $newstr);
function getIP(string $host, string $dns = '8.8.8.8'): string {
exec ('host ' . escapeshellarg ($host) . ' ' . escapeshellarg ($dns) . ' 2>&1', $lines, $ret);
if ($ret !== 0) {
ob_start();
var_dump ($lines, $ret);
$debugstr = ob_get_clean();
throw new \RuntimeException ('host failed. debuginfo: ' . $debugstr);
}
foreach ($lines as $line) {
if (false === stripos ($line, 'has address ')) {
continue;
}
// found it
$ret = trim (substr ($line, stripos ($line, 'has address ') + strlen ('has address ')));
if (! filter_var ($ret, FILTER_VALIDATE_IP)) {
throw new \RuntimeException ('the extracted ip address is invalid! (wrong syntax for host?)');
}
return $ret;
}
throw new \RuntimeException ('could not find ip address!');
}
在hosts文件以下新行:
#<wtf_cronjob>
216.58.209.142 google.com
#</wtf_cronjob>
嗨,不幸的是,我們沒有代理,它不能解釋爲什麼它是網絡特定的問題。相同的設備,相同的配置,相同的請求,通過一個AP,它不能工作,通過另一個AP工作。 –
也許你的接入點是這個問題?訪問有一些防火牆配置?你是否嘗試使用@hanshenrik說的嘗試?測試是一個好主意。 –
問題不是關於一個AP。它發生在服務器和我的本地機器上。我試圖手動分配域應該如何解決。在我的例子中,有一個錯誤 - 應該是端口443,而不是80(但是關於未知主機名的消息很奇怪)。由於這個嘗試,請求正在工作,刪除後,它仍然有效。 –