Как получить доступ к Microsoft Graph Java API из Java-приложения за прокси-сервером?
Я использую MS-граф Java Java SDK для доступа к дискам O365 ODFB из моего Java-приложения. Когда я обхожу корпоративный прокси-сервер (подключенный к открытому интернету), я могу получить желаемый ответ от 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);
Я что-то упускаю? Пожалуйста помоги.
0 ответов
Похоже, при подключении через прокси вам не хватает какой-то конфигурации. См. Ссылку ниже для получения исчерпывающей информации при подключении через прокси.
Подключиться через прокси с помощью Java
Вы также можете попробовать использовать настройки сети по умолчанию для подключения через прокси вместо того, чтобы явно указывать
System.setProperty("java.net.useSystemProxies", "true");