2014-02-22 74 views
0

我想讀從套接字編程,但服務器的遠程服務器http_authPHP socket編程與權威性

保護的文件,我不能讓插座甚至提供TCP工作://用戶名:[email protected]

我得到這個錯誤

php_network_getaddresses: getaddrinfo failed: No such host is known. (0) 

這裏是我的代碼

$fp = stream_socket_client(" tcp://username:[email protected]:80", $errno, $errstr, 30); 
if (!$fp) { 
    echo "$errstr ($errno)<br />\n"; 
} else { 
    fwrite($fp, "GET/HTTP/1.0\r\nHost: hostname.com\r\nAccept: */*\r\n\r\n"); 
    while (!feof($fp)) { 
     echo fgets($fp, 1024); 
    } 
    fclose($fp); 
} 

回答

0

塊好了,一,你在TCP串錯字:

" tcp://username:[email protected]:80" 

應該

"tcp://username:[email protected]:80" 

就其本身而言,在你的URI的開始額外的空間將導致您的stream_socket_client調用失敗,我想它是負責getaddrinfo錯誤,因爲如果URI字符串無效,主機無法解析。此外,即使DNS問題解決,驗證也會失敗,因爲password拼寫錯誤爲passwrod

假設在此之後它仍然不起作用,您應該看看您的DNS設置。 getaddrinfo failed: No such host is known意味着你的服務器無法揣摩出hostname.com位於...你開始擔心認證或端口此之前,只要確保

  • hostname.com是有效的URL
  • 的DNS服務配置正確的你的服務器(嘗試運行一些應該可以正常工作的簡單應用,比如$fp = stream_socket_client("tcp://yahoo.com:80", $errno, $errstr, 30); var_dump($fp); - 如果那個調用沒有返回資源,那麼你的DNS服務不能正常工作......或者你可以嘗試從服務器ping,看看是否您可以訪問www.yahoo.com。
  • 檢查您的服務器的代理服務器設置
+0

劑量不作出任何不同,我測試了和結果都一樣;) – madman

+0

有幾個建議剛剛更新。 –

0

試試這個:

<?php 
if(!($fp = fsockopen("hostname", 80))) 
{ 
    throw new Exception("Couldn't open socket!\n"); 
} 
fputs($fp, "GET/HTTP/1.0\r\n"); 
fputs($fp, "Host: hostname\r\n"); 

fputs($fp, "Authorization: Basic " . 
    base64_encode("username:password") . 
    "\r\n"); 

fputs($fp, "\r\n"); 

fpassthru($fp); 
?> 
+0

我得到這個錯誤的代碼WWW身份驗證:基本領域=「多分享登錄」401 – madman

+0

代碼工程很好 - 驗證失敗。你用正確的憑證替換了用戶名:密碼嗎?嘗試在瀏覽器中使用相同的內容。 也嘗試添加主機頭。 – enterx