java - 阅读邮件时 Google Gmail API Java 无法按预期工作
问题描述
我想使用 Google Gmail API for Java 从 gmail 帐户读取邮件。
我创建了一个示例 Core Java 项目,代码在此处为 gmail 应用程序的 google 控制台开发人员示例中给出
我运行了这段代码,但我遇到了java.net.SocketTimeoutException: Read timed out
异常。实施细则如下:
当我调试上面的代码时,在第 67 行return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
,我得到一个浏览器提示登录 gmail 帐户以访问在开发人员控制台中配置的我的项目。
http://localhost:25745/Callback?code=4/AABrLErTmOxzKEqqD31iiMftE93i3k06oJ4sAI34uS7jI7U-VAdofx0hV8ZoyzHEJyjFEx6x1VYASMNe779Dpa0#
我收到消息“收到验证码。您现在可以关闭此窗口。” 在屏幕上。在 url 中,端口每次都会更改。
在代码中,它尝试请求令牌以开始执行 gmail 操作,但它在那里等待并给出以下异常:
Exception in thread "main" java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:170)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:593)
at sun.security.ssl.InputRecord.read(InputRecord.java:532)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1283)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1258)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250)
at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:77)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:981)
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:283)
at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeTokenRequest.execute(GoogleAuthorizationCodeTokenRequest.java:158)
at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeTokenRequest.execute(GoogleAuthorizationCodeTokenRequest.java:79)
此外,我尝试通过https://accounts.google.com/o/oauth2/token
使用以下参数发送 POST 请求来手动获取令牌:代码 - 允许访问应用程序 client_id 后我在 URL 中收到的代码 - o-auth 客户端的客户端 ID client_secret - o-auth 客户端的客户端密钥 grant_type - authentication_code redirect_uri - http://localhost
我得到以下响应:{“error”:“invalid_grant”,“error_description”:“Bad Request”}
任何人都知道我如何解决上述错误或我做错了什么,这将是一个很大的帮助。
解决方案
推荐阅读
- java - 如何使用带有 Quarkus 的 Vertx 路由器将所有未找到的路由重定向到 index.html?
- javascript - React:如何在我无法控制的功能组件中使用 refs(即来自库)
- c# - C# 加入动态列
- django - Django:我无法发现的视图中的 TypeError
- matlab - 如何对复数使用 Shuffle.c 索引模式
- node.js - NW.js / Node.js 使用 node-mssql 时抛出“SSL 例程:ssl_choose_client_version:unsupported protocol”错误 / 乏味
- swift - 在不增加堆栈宽度的情况下更改文本宽度
- google-apps-script - 使用 Google Apps 脚本从文本中删除脚注索引或上标
- python - 将数据框转换为 csv 文件
- python - 对象的描述符“__dict__”不适用于使用 type() 的对象