0

認証されたクライアントを起動するために必要な認証コードを取得しようとしたときに得られる応答に問題があります。応答は (少なくとも私には) ある種のバイナリ データ (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、ストリームから最初に読み取ろうとする行に到達しています。

4

0 に答える 0