在Websphere 8.x上使用Java 8。尝试从MS Graph API(/v1.0/reports/getEmailActivityUserDetail(period='D7')
终点)获取审计报告,以执行报告上次用户登录活动等操作。
生成OAuth令牌等都可以正常工作,我可以成功获取302 redirect
URL,这样我就可以使用postman
或wget
,PHP的file_get_contents
等从浏览器下载CSV报告文件。
仅使用Java 8命令行应用程序在家中工作,以下代码可以很好地抓取文件。如果我将代码粘贴到我的工作机器并通过Websphere Web应用程序调用它,我会收到一条带有“连接重置”消息的IOException(注意 - 不要由peer重置!)。我已经为reports.office.com
添加了SSL证书,并在我的构建和类路径中添加了Apache Commons CSV lib / jar。
关于如何进一步调试以修复此问题的建议值得赞赏。
String targetUrl = "https://reportsncu.office.com/data/v1.0/download?token=eyJ...*snip*...gFCg";
try {
InputStream input = new URL(targetUrl).openStream();
Reader r = new InputStreamReader(input);
Iterable<CSVRecord> records = CSVFormat.DEFAULT.parse(r);
for (CSVRecord record : records) {
String user = record.get(1);
String lastActive = record.get(5);
if (user.equals("[email protected]")) {
System.out.println(user + " last active " + lastActive);
}
}
r.close();
input.close();
} catch (MalformedURLException ex) {
System.out.println("MalformedURLException: "+ex.getMessage());
} catch (IOException ex) {
System.out.println("IOException: "+ex.getMessage());
}
StackTrace()的“有趣”部分表示可能存在SSL正在发生的事情,但它通常是“忘记将webserver证书导入websphere配置”错误,我通常在首次连接到API服务时看到错误等。
SystemErr R java.net.SocketException: Connection reset
SystemErr R at java.net.SocketInputStream.read(SocketInputStream.java:220)
SystemErr R at java.net.SocketInputStream.read(SocketInputStream.java:152)
SystemErr R at com.ibm.jsse2.a.a(a.java:79)
SystemErr R at com.ibm.jsse2.a.a(a.java:182)
SystemErr R at com.ibm.jsse2.as.a(as.java:883)
SystemErr R at com.ibm.jsse2.as.i(as.java:969)
SystemErr R at com.ibm.jsse2.as.a(as.java:680)
SystemErr R at com.ibm.jsse2.as.startHandshake(as.java:859)
SystemErr R at com.ibm.ws.ssl.config.WSSocket.startHandshake(WSSocket.java:414)
SystemErr R at com.ibm.net.ssl.www2.protocol.https.c.afterConnect(c.java:16)
SystemErr R at com.ibm.net.ssl.www2.protocol.https.d.connect(d.java:44)
SystemErr R at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1561)
SystemErr R at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1489)
SystemErr R at com.ibm.net.ssl.www2.protocol.https.b.getInputStream(b.java:93)
SystemErr R at java.net.URL.openStream(URL.java:1057)
报告如果这没有帮助,@ivanivan!
您发布的堆栈跟踪带回了IBM JDK的可怕记忆:)我没有任何特定的公开 - 但这有助于一些! https://www.ibm.com/developerworks/community/forums/html/topic?id=ec367703-7957-4249-9f0b-559c717c0c87