【问题标题】:PHP CURL returns nothingPHP CURL 什么都不返回
【发布时间】:2011-09-13 13:36:25
【问题描述】:
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 身份验证。

我错过了一些简单的东西还是什么?

【问题讨论】:

  • 如果您的用户名和密码中有任何特殊字符(例如,如果您的用户名是电子邮件地址,则为 @ 符号),请确保它们已被转义。
  • 不,用户名只是“admin”,密码也很简单。

标签: php curl http-authentication


【解决方案1】:

从这样做开始,看看你会得到什么,然后问题就很明显了:

检查curl_exec之后的请求是否有错误:

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

这将为您提供足够的信息来了解请求是否存在错误。如果没有错误,您可以检查 curl_exec 之后发送的请求,以便再次检查发送的所有内容是否到位:

print_r(curl_getinfo($ch));

编辑:在 cmets 之后,这就是您要寻找的东西:

您需要设置选项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。

【讨论】:

  • Curl 不返回任何错误,但带有 print_r(curl_getinfo($ch));我注意到 [http_code] => 401 >_admin:pass@xxx.me:8086/serverinfo”
  • 即使是带有完整 url(带有凭据和端口)的 file_get_contents 也会返回 401 Unauthorized。但我可以简单地导航到链接和浏览器,它可以正常工作。
  • 感谢帮助 :) 我实际上在搜索 curl 401 后意识到我缺少 auth 选项。但是非常感谢,问题解决了 :)
  • 谢谢兄弟的帮助。
猜你喜欢
  • 2023-04-10
  • 2014-10-13
  • 1970-01-01
  • 2015-11-18
  • 2018-10-16
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多