提问者:小点点

curl-httpauth在命令行中运行得很好,但在php上运行得不好


你好,我有命令行代码:

curl 'http://192.168.0.1:80/' -H 'Authorization: Basic my_auth'

在php中:

$process = curl_init($ip);
//just for "shore"
            curl_setopt($data, CURLOPT_HTTPHEADER,
            array(
              "Authorization: Basic " . base64_encode($username . ":" . $password)
            ));
            curl_setopt($process, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
            curl_setopt($process, CURLOPT_USERPWD, $login . ":" . $password);
            curl_setopt($process, CURLOPT_CONNECTTIMEOUT, 10);
            curl_setopt($process, CURLOPT_TIMEOUT, 10);

            curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($process, CURLOPT_VERBOSE, 1);
            curl_setopt($process, CURLOPT_HEADER, 1);

            $return = curl_exec($process);

在结果中我看到:401...在apache2日志中:

>

  • HTTP 1.0,假设主体后关闭

    获取 / HTTP/1.0 授权:基本 my_code 主机:192.168.0.1 接受:/

    HTTP 1.0,假设在正文之后关闭


  • 共1个答案

    匿名用户

    这不是使用curl发送基本Auth的方式。对于Basic,预期的头是< code>Authorization: Basic

    curl -u "user:pass" http://<endpoint>/
    

    如果您“手动”发送标头,您必须先自己对其进行Bas64编码。

    现在,您的PHP代码是正确的,而curl调用不正确。这意味着服务如何解释授权存在问题。