我正在使用 MS graph Java sdk 来从我的 java 应用程序访问 O365 ODFB 驱动器。当我绕过企业代理服务器(连接到开放互联网)时,我能够从 API 获得所需的响应。但是当我通过代理服务器连接时,出现以下异常:
SEVERE: Throwable detail: com.microsoft.graph.core.ClientException: Error during http request
Exception in thread "main" com.microsoft.graph.core.ClientException: Error during http request
at com.microsoft.graph.http.DefaultHttpProvider.sendRequestInternal(DefaultHttpProvider.java:356)
at com.microsoft.graph.http.DefaultHttpProvider.send(DefaultHttpProvider.java:197)
at com.microsoft.graph.http.DefaultHttpProvider.send(DefaultHttpProvider.java:177)
at com.microsoft.graph.http.BaseCollectionRequest.send(BaseCollectionRequest.java:87)
at com.microsoft.graph.requests.generated.BaseDriveItemCollectionRequest.get(BaseDriveItemCollectionRequest.java:54)
at com.example.TestMain.main(TestMain.java:148)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.security.ssl.SSLSocketImpl.connect(Unknown Source)
at sun.security.ssl.BaseSSLSocketImpl.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.<init>(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.New(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)
at com.microsoft.graph.http.UrlConnection.getResponseCode(UrlConnection.java:110)
at com.microsoft.graph.http.DefaultHttpProvider.sendRequestInternal(DefaultHttpProvider.java:297)
我用来连接 Graph API 的代码如下:
// Get an access token for the client
Authenticator authenticator = new Authenticator();
IAuthenticationProvider authenticationProvider = authenticator.getAuthenticationProvider();
graphClient = GraphServiceClient
.builder()
.authenticationProvider(authenticationProvider)
.buildClient();
graphClient.getLogger().setLoggingLevel(LoggerLevel.DEBUG);
在这一行出现错误:
DriveItem item = graphClient.users().byId("userPrincipalName")
.drive()
.root()
.children()
.buildRequest()
.get()
.getCurrentPage()
.get(0);
我可以通过将代理配置传递给HttpURLConnection.openConnection(proxy)
Authenticator 类中的方法来获取承载令牌。
例如:
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("myproxyaddress", 80));
@SuppressWarnings("restriction")
String encoded = new sun.misc.BASE64Encoder().encodeBuffer(("username:password").getBytes()).replace("\r\n", "");
URL url = new URL(tokenEndpoint);
HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);
conn.setRequestProperty("Proxy-Authorization", "Basic " + encoded);
我错过了什么吗?请帮忙。