如何解决curl + https://mail.google.com/mail/feed/atom = 401 未经授权
过去,我可以在 bash 或 zsh shell 脚本中使用 curl
成功访问我的 Gmail 帐户,如下所示:
USERNAME='example@gmail.com'
PASSWORD='superSeckret'
URL='https://mail.google.com/mail/feed/atom'
curl -s -u "$USERNAME:$PASSWORD" "$URL"
但是,现在当我尝试此操作时,出现此错误:
<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
如果我在网络浏览器中打开 https://mail.google.com/mail/feed/atom,它会按预期显示提要,但我无法通过 curl
使其工作。
我尝试查看 Google 是否关闭了对此的访问,但我没有看到任何看起来相关的内容,但我仍然无法使其正常工作。
还有其他方法可以尝试吗?
至少我想要的是在我的 Gmail 收件箱中获取未读邮件的数量。
能够看到 From: 和 Subject: 行也很好。
(我已经从我的常规 Gmail 帐户和我的工作电子邮件中尝试了这个,这是一个谷歌套件/谷歌应用程序地址,它支持“不太安全的应用程序”。我实际上是为了我的工作尝试这样做电子邮件。)
任何帮助将不胜感激。
解决方法
经过一些测试,看来要使用这个端点,你首先要尝试登录,你会失败,然后你必须正常登录gmail,然后去https://myaccount.google.com/notifications找到你的失败登录尝试在列表中,并确认 that was me
,之后 https://mail.google.com/mail/feed/atom 端点应该再次使用 HTTP 基本身份验证 .. 至少这对我有用
经过多次反复试验,我找到了一种有效的方法。
我不知道为什么这种方式有效,而另一种方式(曾经有效)却行不通。
我只知道截至 2021 年 3 月 3 日,这种方式有效,而另一种则无效。
对于 Gmail
如果您的 Gmail 地址是 "dependencies": {
"bar": "file:./myPath" // package.json is read inside of ./myPath
}
,那么这将起作用
example@gmail.com
对于由 Google 托管的域
如果您的 Google Suite/Google Apps/任何帐户是 curl -sfLS "https://example:supersekretpassword@mail.google.com/mail/feed/atom"
,那么这将起作用
me@example.com
,
“不太安全的应用访问”选项
一旦关闭“不太安全的应用程序访问”选项,即使在 atom 提要端点上使用正确的凭据,您也会收到 HTTP 状态 401。
转到 https://myaccount.google.com/security 以激活“不太安全的应用程序访问”选项以确保身份验证再次成功。
根据https://support.google.com/accounts/answer/6010255?p=less-secure-apps
,此选项在一段时间未使用后会自动设置为关闭使用 OAuth 进行身份验证
防止这些身份验证问题的更明智的方法是使用 OAuth 协议进行身份验证:https://developers.google.com/gmail/gmail_inbox_feed
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。