認証されたクライアントを起動するために必要な認証コードを取得しようとしたときに得られる応答に問題があります。応答は (少なくとも私には) ある種のバイナリ データ (1 つまたは 2 つの認識可能な文字列フラグメントを含む) のように見えますが、それを処理する方法がわかりません。API の「hello world」プログラムのコードは、このデータを文字列として解析しているようですが、試してみると、期待される形式ではないため失敗します。
これは、問題が何であるかを示すために、ここにある「Hello World」プログラム (box api github wiki から) を改変したものです。
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 ...]
}
}
4行目以降は全部そのままnull
なので、4行目でやめました。
結果はこちらoutput.txt
のファイルで確認できます。私のコンピューターは文字列の貼り付けを拒否するため、それ自体を質問に含めることができませんでした。出力を 16 進エディタで調べてみましたが、明らかなパターンは見当たりませんでした。(時折で区切られたもののバースト?)NULL
無数の Google 検索で、この問題に関連すると思われるものは何も見つかりませんでした。Javadoc も API チュートリアルも、ここでは役に立ちませんでした。
どうすればこの問題に対処できますか? コードが間違っている場合は、修正方法を教えてください。
編集:だから私はとを置き換えてみsocket
ましserverSocket
た
SSLServerSocket serverSocket = (SSLServerSocket) SSLServerSocketFactory.getDefault().createServerSocket(socket_port);
SSLSocket socket = (SSLSocket) serverSocket.accept();
しかし今
javax.net.ssl.SSLHandshakeException: no cipher suites in common
、ストリームから最初に読み取ろうとする行に到達しています。