2017-07-30 49 views
0

我的一个项目有gateway.watsonplatform.net间歇性连接问题。它一直工作正常,没有什么改变,但现在,80%的时间,它无法在DNS缓存中找到主机名。在DNS缓存中找不到主机名

我试过设置CURLOPT_RESOLVE选项,但它只是在输出中添加一行关于将主机名添加到缓存中的内容,但是仍然没有找到它。

我试图在本地运行项目,我想出了它是网络特定的。它适用于一个接入点,另一方面,它有连接问题。

另一个奇怪的提示:shell中的curl命令有效。

有输出:

  • 新增gateway.watsonplatform.net:80:158.85.132.88 DNS缓存
  • 主机名未在DNS高速缓存中找到
  • 无法解析主机: gateway.watsonplatform.net

更新: 该端口应该是443,而不是80.在此更改后,它可以正常工作。删除整个这个任务后,它仍然有效。现在,我无法重现这个问题。

回答

0

我试图分配领域应该手动如何解决。由于这一步,请求正在工作,并在删除此作业后仍然有效。

0

当我在一个Customer内部使用IBM Watson实现一个项目时,我遇到了同样的问题。在这种情况下:您需要在代理网络中发布URL。

cURL和Nodejs调用起作用的原因是因为服务器正在通过防火墙进行调用,而不是传递给您的代理网络。

确保在您的服务器中设置代理时URL是否有效:在您的SO(选项互联网)中连接高级。

+0

嗨,不幸的是,我们没有代理,它不能解释为什么它是网络特定的问题。相同的设备,相同的配置,相同的请求,通过一个AP,它不能工作,通过另一个AP工作。 –

+0

也许你的接入点是这个问题?访问有一些防火墙配置?你是否尝试使用@hanshenrik说的尝试?测试是一个好主意。 –

+0

问题不是关于一个AP。它发生在服务器和我的本地机器上。我试图手动分配域应该如何解决。在我的例子中,有一个错误 - 应该是端口443,而不是80(但是关于未知主机名的消息很奇怪)。由于这个尝试,请求正在工作,删除后,它仍然有效。 –

0

作为一个有点丑陋的黑客让它工作,你可以添加一个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> 
相关问题