PHP CURL什么也没有返回

问题描述:

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

通过这样开始了,看看你会得到什么,之后,这将是非常明显的问题是什么:

检查是否有与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> _ 2011-06-12 21:45:49

+0

即使file_get_contents具有完整的url(凭证和端口)也会返回401 Unauthorized。但我可以简单地导航到链接和浏览器,并且它可以正常工作。 – 2011-06-12 21:49:06