0

Watson Question and Answers API をテストする Java コードを作成しました。ただし、実行すると、応答コード 500 が返されます。API URL とログイン資格情報を確認しました。問題は別の場所にあるようです。ヒントやデバッグの提案は非常に役立ちます。

    String url = "https://watson-wdc01.ihost.com/instance/526/deepqa/v1/question";
    URL obj = new URL(url);
    HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

    //add reuqest header
    String userCredentials = "username:password";
    String basicAuth = "Basic " + DatatypeConverter.printBase64Binary(userCredentials.getBytes());
    con.setRequestProperty ("Authorization", basicAuth);
    con.setRequestProperty("X-SyncTimeout", "30");
    con.setRequestProperty("Accept", "application/json");
    con.setRequestProperty("Content-Type", "application/json");
    con.setRequestProperty("Cache-Control", "no-cache");
    con.setRequestMethod("POST");

    String query = "{\"question\": {\"questionText\": \"" + "What are the common respiratory diseases?" + "\"}}";
    System.out.println(query);

    // Send post request
    con.setDoOutput(true);
    DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    wr.writeBytes(query);
    wr.flush();
    wr.close();

    int responseCode = con.getResponseCode();
    System.out.println("Response Code : " + responseCode);
    BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();

    //print result
    System.out.println(response.toString());

ブラウザーで同じ URL を開くと、次のようになります。Watson Error!! エラー発生!! ワトソンと通信できません。どうしたの?それは構成の何かでしょうか?それともサーバーダウン?

4

1 に答える 1

2

ヒントやデバッグの提案は非常に役立ちます。

  1. Web ブラウザまたはcurlユーティリティを使用して同じ要求を試みます。

  2. エラー ストリームの内容をキャプチャして出力します。


これがあなたの問題の原因だとは思いませんが、とにかく間違っています:

DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(query);
wr.flush();

テキスト (JSON) を必要とする API に書き込んでいます。Writerしたがって、データ (バイナリ) 出力ストリームではなく、 を使用する必要があります。

Writer wr = new OutputStreamWriter(con.getOutputStream(), "LATIN-1");
wr.write(query);
wr.flush();
于 2015-04-12T01:49:34.637 に答える