【问题标题】:How to set the authorization header using cURL如何使用 cURL 设置授权标头
【发布时间】:2011-03-03 22:13:34
【问题描述】:

如何使用 cURL 传递授权标头? (在/usr/bin/curl 中可执行)。

【问题讨论】:

    标签: curl http-authentication


    【解决方案1】:

    http://curl.se/docs/httpscripting.html

    参见第 6 部分。HTTP 身份验证

    HTTP 身份验证

    HTTP 身份验证是告诉服务器您的用户名和 密码,以便它可以验证您是否被允许执行您的请求 正在做。 HTTP 中使用的基本身份验证(这是 curl 使用的类型 默认)是基于plain text的,这意味着它发送用户名和密码 只是稍微混淆了一点,但任何嗅到的人仍然可以完全阅读 你和远程服务器之间的网络。

    告诉 curl 使用用户名和密码进行身份验证:

    curl --user name:password http://www.example.com
    

    该网站可能需要不同的身份验证方法(检查标题 由服务器返回),然后是 --ntlm、--digest、--negotiate 甚至 --anyauth 可能是适合您的选项。

    有时您的 HTTP 访问只能通过使用 HTTP 获得 代理。这似乎在各个公司中尤为常见。 HTTP 代理 可能需要自己的用户名和密码才能让客户端通过 互联网。要使用 curl 指定那些,请运行以下命令:

    curl --proxy-user proxyuser:proxypassword curl.haxx.se
    

    如果您的代理需要使用 NTLM 方法进行身份验证, 使用 --proxy-ntlm,如果需要 Digest 使用 --proxy-digest。

    如果您使用这些用户+密码选项中的任何一个,但忽略密码 部分,curl 会以交互方式提示输入密码。

    请注意,当程序运行时,可能会看到其参数 列出系统正在运行的进程时。因此,其他用户可能 如果您将密码作为纯命令行传递,则能够查看您的密码 选项。有办法规避这一点。

    值得注意的是,虽然这是 HTTP 身份验证的工作方式,但非常 许多网站在提供登录等时不会使用此概念。请参阅 有关详细信息,请参阅下面的 Web 登录章节。

    【讨论】:

    • @Vixed 这个问题显然与 PHP 无关。 [Google 的结果有什么问题]?
    • 问题是关于授权而不是身份验证,所以也许 OP 应该更改问题的标题
    【解决方案2】:

    一个简单的例子是使用授权转换为base64的参数

    curl -XPOST 'http://exemplo.com/webhooks?Authorization=Basic%20dGVzdDoxMjM0NTYK'
    
    

    【讨论】:

      【解决方案3】:

      此示例包括以下内容:

      curl -X POST -H "Content-Type: application/json" -d '{"name”:”Johnny B. Goode”, "email”:”johnny.b.goode@mail.com"}' -H "Authorization: Bearer $(echo -n  Guitar Maestro | base64)" https://url-address.com 
      
      

      【讨论】:

        【解决方案4】:

        这对我有用:

        curl -H "Authorization: Bearer xxxxxxxxxxxxxx" https://www.example.com/
        

        【讨论】:

        • JWT 用什么?
        • 你不是说Authorization: bearer xxxxxxxxx吗?
        • @jlh 你的意思是Bearer
        • 我几乎可以肯定它不区分大小写,但似乎我错了。是的,我的意思是Bearer
        【解决方案5】:

        curl 7.61.0 开始,您可以使用--oauth2-bearer <token> 选项设置正确的承载授权标头。

        【讨论】:

          【解决方案6】:

          如果你在调用的时候没有令牌,你将不得不进行两次调用,一个是获取令牌,另一个是从响应中提取令牌,注意

          grep 令牌 |切-d,-f1 |剪切 -d\" -f4

          因为它是处理从响应中提取令牌的部分。

          echo "Getting token response and extracting token"    
          def token = sh (returnStdout: true, script: """
              curl -S -i -k -X POST https://www.example.com/getToken -H \"Content-Type: application/json\" -H \"Accept: application/json\" -d @requestFile.json | grep token | cut -d, -f1 | cut -d\\" -f4
          """).split()
          

          提取令牌后,您可以使用令牌进行后续调用,如下所示。

          echo "Token : ${token[-1]}"       
          echo "Making calls using token..."       
          curl -S -i -k  -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer ${token[-1]}" https://www.example.com/api/resources 
          

          【讨论】:

            【解决方案7】:

            使用时请注意: curl -H "Authorization: token_str" http://www.example.com

            token_strAuthorization 必须用空格隔开,否则服务器端将无法获取HTTP_AUTHORIZATION 环境。

            【讨论】:

            • 不正确,如果需要空格,则您的 HTTP 服务器已损坏。您还需要两个字符串一个类型,然后是令牌。
            【解决方案8】:

            对于 HTTP 基本身份验证:

            curl -H "Authorization: Basic <_your_token_>" http://www.example.com

            替换 _your_token_ 和 URL。

            【讨论】:

            • 使用 oauth 时,授权令牌从何而来?我正在尝试使用 curl 从我使用用户名和密码的站点下载文件,但由于使用了 oauth2,它似乎失败了。
            • @toasteez 您必须通过 Oauth2 流程才能接收令牌。通常它是一个两步过程,应该在服务器的文档中详细说明。
            • 好答案。一个小助手echo -ne "<your-user>:<your-pass>" | base64 --wrap 0 将生成基本的身份验证令牌。
            • @MikeD -H "Authorization: Basic <_your_token_>"--user login:password 的效果相同。你可以通过curl -v查看它
            • @vladkras 我的回答是这个答案的 helper。根据我的经验,最好了解如何创建令牌,而不是依赖 curl 来生成它。
            【解决方案9】:

            不记名令牌如下所示:

            curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com
            

            【讨论】:

            • 如果您想要进行“基本”授权,只需将“承载”替换为“基本”
            • 我遇到了最奇怪的事情,我收到“授权标头格式错误”和“HTTP-200”。所以服务器接受了我的授权,但是格式不对?
            【解决方案10】:

            (对于那些正在寻找php-curl答案的人)

            $service_url = 'https://example.com/something/something.json';
            $curl = curl_init($service_url);
            curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
            curl_setopt($curl, CURLOPT_USERPWD, "username:password"); //Your credentials goes here
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_POST, true);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //IMP if the url has https and you don't want to verify source certificate
            
            $curl_response = curl_exec($curl);
            $response = json_decode($curl_response);
            curl_close($curl);
            
            var_dump($response);
            

            【讨论】:

              【解决方案11】:

              只需添加即可,无需点击:

              curl --user name:password http://www.example.com
              

              或者如果您尝试为 OAuth 2 发送身份验证:

              curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com
              

              【讨论】:

              • 许多 API 现在使用标头授权令牌。 -H 选项很棒。
              • 如果使用 -u 或 --user,Curl 会将凭据编码为 Base64 并生成如下标题:-H Authorization: Basic &lt;Base64EncodedCredentials&gt;
              • 我正在尝试添加带有HMAC-SHA256 的授权标头,但总是收到缺少授权标头的错误
              • 另外,如果您需要@timothy-kansaki 提到的&lt;Base64EncodedCredentials&gt;,您可以使用以下命令获取编码的凭据:cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com。如需参考,请参阅stackoverflow.com/questions/16918602/…
              • @DavidGolembiowski 默认情况下, echo 至少在 Mac 上会换行。如您的链接中所述,您需要 echo -n 防止包含换行符
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-09-23
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多