为什么当我尝试从 LinkedIn 检索个人的电子邮件地址时 curl 不起作用

Why is curl not working when I attempt to retrieve the email address of an individual from LinkedIn

我目前正在开发一款允许用户通过 LinkedIn 登录的应用程序。我想获取用户的电子邮件,目前正在首先使用 curl 通过终端对其进行测试。从 LinkedIn 的 API 文档我知道我需要从这个 url:

https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))

获取用户的电子邮件。我已经请求我的用户允许检索他们的电子邮件地址。 curl命令我运行如下:

curl https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -H "Authorization: Bearer access_token"

其中 access_token 实际上是实际的访问令牌。然而,每次我在终端上 运行 时,我总是得到这样的回应:

[1] 31166
zsh: no matches found: https://api.linkedin.com/v2/emailAddress?q=members
zsh: unknown file attribute: h
[1]  + exit 1     curl https://api.linkedin.com/v2/emailAddress?q=members

考虑到我的请求,这很奇怪:

https://api.linkedin.com/v2/me

工作得很好。有谁知道这可能是什么原因造成的?

URL 中的 & 被解析为 shell 运算符,运行 curl 在后台解析。您需要转义它,这最容易通过引用整个 URL.

curl 'https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))' \
     -H "Authorization: Bearer access_token"

更完整的,将&解析为命令终止符后,有如下两条命令:

curl https://api.linkedin.com/v2/emailAddress?q=members & 
projection=(elements*(handle~))' -H "Authorization: Bearer access_token"

在这两种情况下,您的字符都会导致 zsh 尝试生成文件名。

  1. ?在第一个
  2. *

第一个命令在后台运行,并立即失败,因为 zsh 将不匹配的模式视为错误,而不是像 bash 默认情况下那样的文字文本。

第二个命令甚至在尝试匹配之前就失败了。 ( 引入了一系列 glob 限定符,但 h 不是公认的限定符。