2011-06-12 78 views
17
function ParseUrl($URL) 
{ 
    $crl = curl_init(); 
    curl_setopt ($crl, CURLOPT_URL, $URL); 
    curl_setopt ($crl, CURLOPT_PORT, 8086); 
    curl_setopt ($crl, CURLOPT_USERPWD, "admin:pass"); 
    curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, 5); 
    $ret = curl_exec($crl); 
    curl_close($crl); 
    return $ret; 
} 

echo ParseUrl('http://xxx.me/serverinfo'); 

上面的代碼不會返回任何內容。我試圖用curl獲得的頁面使用http認證的東西。PHP CURL什麼也沒有返回

我是否缺少一些簡單或什麼?

+1

如果您在用戶名和密碼中有任何特殊字符(例如,如果您的用戶名是電子郵件地址,請輸入「@」符號),請確保它們已被轉義。 – lonesomeday 2011-06-12 21:41:33

+0

不,用戶名只是「admin」,密碼也很簡單。 – 2011-06-12 21:46:44

回答

50

通過這樣開始了,看看你會得到什麼,之後,這將是非常明顯的問題是什麼:

檢查是否有與curl_exec後請求的錯誤:

if(curl_errno($ch)){ 
    echo 'Curl error: ' . curl_error($ch); 
} 

這將爲您提供足夠的信息來了解請求是否存在錯誤。如果沒有錯誤,你可以檢查curl_exec後發送的請求,所以你可以仔細檢查發送的一切就緒:

print_r(curl_getinfo($ch)); 

編輯:在評論這是你在找什麼東西丟失:您需要設置選項CURLOPT_HTTPAUTH

Quote from php.net on the subject

的HTTP認證方法(一個或多個),以 使用。選項爲:CURLAUTH_BASIC, CURLAUTH_DIGEST, CURLAUTH_GSSNEGOTIATE,CURLAUTH_NTLM, CURLAUTH_ANY和CURLAUTH_ANYSAFE。

按位| (或)運算符可以是用於組合多個方法的 。 如果這樣做了,cURL將輪詢 服務器以查看它支持的方法 並選擇最好的一個。

CURLAUTH_ANY是 的別名CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM。

CURLAUTH_ANYSAFE是 的別名CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM。

+2

投票和三個贊成基本的調試步驟。 :D – OpenSorceress 2011-06-12 21:43:05

+0

Curl不會返回任何錯誤,但會返回print_r(curl_getinfo($ ch));我注意到[http_code] => 401> _ <如果有一種簡單的方法可以通過http身份驗證從url中獲取文件。 url格式爲「http:// admin:[email protected]:8086/serverinfo」 – 2011-06-12 21:45:49

+0

即使file_get_contents具有完整的url(憑證和端口)也會返回401 Unauthorized。但我可以簡單地導航到鏈接和瀏覽器,並且它可以正常工作。 – 2011-06-12 21:49:06