PHP CURL => Rest API(GET)= HTTP_CODE 401

时间:2015-05-19 18:59:45

标签: php rest curl nginx

以下脚本返回" HTTP / 1.1 401 Unauthorized"请求,但我不知道为什么。我知道,请求转到https,但我拒绝"选项" CURLOPT_SSL_VERIFYPEER" ..我认为,根本不是问题,是吗?

<?php
error_reporting(E_ALL); 
ini_set('display_errors', 1);

$html_brand = "https://example.com/api/test";
$ch = curl_init();

$options = array(
    CURLOPT_URL            => $html_brand,
    CURLOPT_RETURNTRANSFER => TRUE,
    CURLOPT_HEADER         => TRUE,
    CURLOPT_FOLLOWLOCATION => TRUE,
    CURLOPT_CONNECTTIMEOUT => 120,
    CURLOPT_TIMEOUT        => 120,
    CURLOPT_SSL_VERIFYPEER => FALSE,
    CURLOPT_CUSTOMREQUEST  => "GET",
    CURLOPT_HTTPAUTH       => CURLAUTH_DIGEST,
    CURLOPT_USERPWD        => "user:pass",
    CURLOPT_HTTPHEADER     => array(
            'Content-Type: application/json; charset=utf-8'
        )
);
curl_setopt_array( $ch, $options );
$response = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ( $httpCode != 200 ){
    echo "Return code is {$httpCode} \n"
        .curl_error($ch);
    echo "<pre>";
    print_r($response);
} else {
    echo "<pre>".htmlspecialchars($response)."</pre>";
}

curl_close($ch);

我认为,只有一个选项可以让卷发失踪..

响应:

  

HTTP / 1.1 401未经授权   服务器:nginx   日期:2015年5月19日星期二18:52:26 GMT   Content-Type:application / json   转移编码:分块   连接:保持活力   Keep-Alive:超时= 5   Www-Authenticate:Digest realm =&#34; REST-API&#34;,domain =&#34; /&#34;,nonce =&#34;&#34;,opaque =&#34;&#34 ;,algorithm =&#34; MD5&#34;,qop =&#34; auth&#34;   缓存控制:nocache,私有   变化:接受编码

     

HTTP / 1.1 400错误请求   服务器:nginx   日期:2015年5月19日星期二18:52:26 GMT   Content-Type:application / json   转移编码:分块   连接:保持活力   Keep-Alive:超时= 5   缓存控制:nocache,私有   变化:接受编码

可能它有点愚蠢,但它是关于auth算法的东西 - md5?密码为纯文本,未经md5加密。

编辑:似乎,它不是关于MD5 - 在将密码编码为md5之后得到了相同的响应。

ONE MORE编辑:好的,同样的客户端在HTTP层(以及另一个INSTANCE!)上工作得很好而不是HTTPS ..所以在HTTPS上有什么东西被打破了?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,在我的情况下服务器有一个301重定向到带有双斜杠的url。在浏览器的地址栏中它是隐形的,当我检查服务器对浏览器的响应时,我意识到了这一点。