当我尝试获取启动经过身份验证的客户端所需的授权代码时,我遇到了响应问题。响应出现(至少对我来说)是某种二进制数据(其中有一个或两个可识别的字符串片段),但我不知道如何处理它。 API的'hello world'程序中的代码似乎是将这些数据解析为一个字符串,但是当我尝试它时,它会失败,因为它不是预期的格式。
这是根据'Hello World'程序(来自方框api github wiki)改编而来here以显示问题所在。
import java.awt.Desktop;
import java.io.*;
import java.net.*;
public class HelloBox {
public static final int socket_port = 4000;
public static final String
redirect_uri = "https://localhost:" + socket_port,
client_id = /* [...] */, client_secret = /* [...] */;
public static void main(String[] args) throws Exception{
Desktop.getDesktop().browse(URI.create(
"https://www.box.com/api/oauth2/authorize?" +
"response_type=code" +
"&client_id=" + client_id +
"&redirect_uri=" + redirect_uri));
ServerSocket serverSocket = new ServerSocket(socket_port);
Socket socket = serverSocket.accept();
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(new FileWriter("output.txt"));
for(int idx = 0; idx < 4; idx++){
String line = in.readLine();
System.out.println(line);
out.println(line);
}
//[... closing all the streams and sockets ...]
}
}
第四行之后的所有行都只是null
,这就是为什么我在四行之后停止了它。
您可以在我的output.txt
文件here中查看结果。我的电脑拒绝粘贴字符串,因此我无法在问题中包含它。我已经尝试用十六进制编辑器检查输出,但我看不到任何明显的模式。 (偶尔NULL
分隔的东西爆发?)
无数的Google搜索都没有显示出与此问题相关的任何内容,而且Javadoc和API教程在这里都没有用。
我该如何处理这个问题?如果我的代码有误,请告诉我如何纠正它。
编辑:
所以我尝试用{/ 1>替换socket
和serverSocket
SSLServerSocket serverSocket = (SSLServerSocket) SSLServerSocketFactory.getDefault().createServerSocket(socket_port);
SSLSocket socket = (SSLSocket) serverSocket.accept();
但现在我要了
javax.net.ssl.SSLHandshakeException: no cipher suites in common
在它首次尝试从流中读取的行。{/ p>