2017-07-30 73 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> 
相關問題