PHP CURL 不返回任何内容

发布于 2024-11-15 05:51:28 字数 507 浏览 2 评论 0原文

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 身份验证。

我错过了一些简单的事情还是什么?

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');

The code above simply returns nothing. The page I am trying to get with curl uses http authentication thing.

Am I missing something simple or what?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

人海汹涌 2024-11-22 05:51:28

首先这样做,看看你得到了什么,然后问题就很明显了:

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

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

这将为你提供足够的信息来知道是否有错误与请求。如果没有错误,您可以检查在curl_exec之后发送的请求,以便您可以仔细检查发送的所有内容是否就位:

print_r(curl_getinfo($ch));

编辑:在注释之后,这就是您正在寻找的缺少的内容:

您需要设置选项CURLOPT_HTTPAUTH

引用自 php.net 关于该主题的内容

HTTP 身份验证方法
使用。选项有:CURLAUTH_BASIC、
CURLAUTH_DIGEST,
CURLAUTH_GSSNEGOTIATE、CURLAUTH_NTLM、
CURLAUTH_ANY 和 CURLAUTH_ANYSAFE。

按位| (或)运算符可以是
用于组合多种方法。
如果完成,cURL 将轮询
服务器查看它支持哪些方法
并选择最好的一个。

CURLAUTH_ANY 是以下的别名
CURLAUTH_BASIC | CURLAUTH_BASIC | CURLAUTH_DIGEST |
CURLAUTH_GSSNEGOTIATE | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM。

CURLAUTH_ANYSAFE 是
CURLAUTH_DIGEST |
CURLAUTH_GSSNEGOTIATE | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM。

Start out by doing this and see what you get, and after that it would be pretty obvious what the problem is:

Check if there was an error with the request after curl_exec:

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

That will provide you with enough info to know if there was a error with the request. If there was no error, you can check the request sent after curl_exec so you can double check that everything sent is in place:

print_r(curl_getinfo($ch));

Edit: After comments this is what you are looking for what is missing:

You need to set the option CURLOPT_HTTPAUTH.

Quote from php.net on the subject:

The HTTP authentication method(s) to
use. The options are: CURLAUTH_BASIC,
CURLAUTH_DIGEST,
CURLAUTH_GSSNEGOTIATE, CURLAUTH_NTLM,
CURLAUTH_ANY, and CURLAUTH_ANYSAFE.

The bitwise | (or) operator can be
used to combine more than one method.
If this is done, cURL will poll the
server to see what methods it supports
and pick the best one.

CURLAUTH_ANY is an alias for
CURLAUTH_BASIC | CURLAUTH_DIGEST |
CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLAUTH_ANYSAFE is an alias for
CURLAUTH_DIGEST |
CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

稍尽春風 2024-11-22 05:51:28

就我而言,端点定义之前有一个空格。

curl_setopt($ch, CURLOPT_URL, " https://api.example.com/someAction);

因此,如果curl 响应没有返回任何内容,请在疯狂之前仔细检查您定义的curl 选项,无论发布的json 是否有效。

In my case there was a space before endpoint definition.

curl_setopt($ch, CURLOPT_URL, " https://api.example.com/someAction);

So if nothing returns from a curl response, double check the curl options you define before going insane whether the posted json is valid or not.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文