将 curl 与 OpenWhisk 结合使用

Using curl with OpenWhisk

我正在尝试使用 IBM OpenWhisk。它有自己的 CLI,但我想使用 curl.

调用一个简单的 "echo" 示例
curl -d-data '{"message": "hellow world"}' https://user:password@openwhisk.ng.bluemix.net:443/api/v1/namespaces/whisk.system/action/samples/echo
curl: (6) Couldn't resolve host '"message": "hello world"'
{
  "error": "HTTP method not allowed, supported methods: GET",
  "code": 81107
}

如何通过 curl 或类似工具调用 OpenWhisk,如何进行身份验证?

身份验证是通过 curl 中的 Basic Authentication, hence you can use the -u 标志完成的。使用您使用的 user:pass@url 版本应该也可以。

要调用一个动作,您必须使用 POST,因此在 curl 中使用 -XPOST. Also, the API expects application/json as the Content-Type. Data is sent via the -d 标志。

您的 url 中也有错别字。您需要使用 actions 而不是 action (整个 API 使用复数)。

总而言之,您的请求应如下所示:

curl -XPOST -H "Content-Type: application/json" -d '{"message": "hello world"}' -u $USERNAME:$PASSWORD https://openwhisk.ng.bluemix.net/api/v1/namespaces/whisk.system/actions/samples/echo

有一个 blog article 涵盖了这个主题。对于阻止操作,只需添加 ?blocking=true 作为参数。

wsk CLI 还有一个非常方便的“-v”选项,它可以显示 HTTP 请求和 headers 所以如果你这样做:

wsk -v action invoke hello --blocking

您将看到实际的 REST API 调用。

身份验证是通过基本身份验证完成的。为 'Authorization' 添加 HTTP Header。使用字符串

'Basic'+base64Encoded(username+':'+password)

其中 base64Encoded(str) 是一种 base64 加密字符串的方法。

您可以通过 https://console.ng.bluemix.net/openwhisk/learn/cli 在 Bluemix 上找到您的 OpenWhisk 帐户的用户名和密码 或者通过 wsk cli: wsk 属性 get 它包含格式为 'username:password'

的 'whisk auth' 属性