-d 和 -u 参数的含义(和提供方法)是啥?

Posted

技术标签:

【中文标题】-d 和 -u 参数的含义(和提供方法)是啥?【英文标题】:What's the meaning (and method to provide) the -d and -u arguments?-d 和 -u 参数的含义(和提供方法)是什么? 【发布时间】:2020-01-05 17:59:05 【问题描述】:

我正在尝试使用 Scala 中的 Playframework 进行 WS GET 调用,以调用 Paypal REST JSON API。我更具体地尝试get the initial Paypal access token:

curl -v https://api.sandbox.paypal.com/v1/oauth2/token \
   -H "Accept: application/json" \
   -H "Accept-Language: en_US" \
   -u "client_id:secret" \
   -d "grant_type=client_credentials"

我在 Scala 中通过以下方式构建它:

@Inject(ws: WSClient)

val url = config.get[String]("paypal.url.token") // https://api.sandbox.paypal.com/v1/oauth2/token
val httpHeaders = Array(
    "Accept" -> "application/json",
    "Accept-Language" -> "en_US"
)
val username = config.get[String]("paypal.client_id")
val password = config.get[String]("paypal.secret")
val request: WSRequest = ws.url(url).withHttpHeaders(httpHeaders: _*).
    withRequestTimeout(timeout).
    withAuth(username, password, WSAuthScheme.BASIC)
val futureResponse = request.get()
futureResponse.map  response =>
    println(response.json)

我在这里假设原始curl 示例中的-u 表示并对应于withAuth,但我不知道grant_type=client_credentials-d 对应于什么?

当我像现在这样运行它时,我收到以下错误: "error":"invalid_token","error_description":"Authorization header does not have valid access token"

还有一些在日志之前: [info] p.s.a.o.a.n.h.i.Unauthorized401Interceptor - Can't handle 401 as auth was already performed

【问题讨论】:

【参考方案1】:

您可以使用man curl 阅读curl 手册。

所以, 1)-u代表--user <username:passsword>

   -u, --user <user:password>
          Specify the user name and password to use for server authentication. Overrides -n, --netrc and --netrc-optional.

          If you simply specify the user name, curl will prompt for a password.

这也翻译成-H "Authorization: &lt;Basic|Bearer&gt; base64_for_username:password"

2) -d 表示 --data 或 POST 请求的有效负载。

   -d, --data <data>
          (HTTP) Sends the specified data in a POST request to the HTTP server, in the same way that a browser does when a user has
          filled in an html form and presses the submit button. This will cause curl to pass the data to the server using the  con-
          tent-type application/x-www-form-urlencoded.  Compare to -F, --form.
验证withAuth(username, password, WSAuthScheme.BASIC) 使用正确的用户名、密码 并在代码中缺少的 scala 中设置帖子正文。我不太了解游戏框架,但这可能是正确的方式 - https://www.playframework.com/documentation/2.6.3/api/java/play/libs/ws/WSRequest.html#post-java.lang.String-

【讨论】:

按照您的回答并切换到帖子可以解决 OP。非常感谢! :)【参考方案2】:

试试post,而不是像这样的get

ws
  .url(url)
  .withAuth(username, password, WSAuthScheme.BASIC)
  .post(Map("grant_type" -> Seq("client_credentials")))
  .map(println)

【讨论】:

非常酷的.map(println) 位用于调试目的:) 作为发布数据,我只使用了一个字符串val body = "grant_type=client_credentials" 并且它起作用了。

以上是关于-d 和 -u 参数的含义(和提供方法)是啥?的主要内容,如果未能解决你的问题,请参考以下文章

UML是啥?

array.splice = 是啥意思?

jquery中的ajax方法参数的用法和他的含义

adamoptimizer是啥训练方法

C#和Java中的构造器constructor是啥?起啥作用?为啥不可以被override??

Assert.assertEquals是啥含义