2015-04-12 2 views
0

Я написал код Java для проверки API вопросов и ответов Watson. Тем не менее, я получаю код ответа 500, когда я его запускаю. Я проверил api url и мои учетные данные. Проблема, похоже, в другом месте. Любые подсказки или предложения по отладке будут очень полезны.IBM Watson Q и API дает 500 код ответа

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 с браузером я получаю это: Ошибка Уотсон !! Ошибка! Невозможно связаться с Уотсоном. Что не так? Может быть, это что-то с конфигурацией? Или сервер вниз?

ответ

2

Любые подсказки или предложения по отладке окажут большую помощь.

  1. Попытаться тот же запрос, используя веб-браузер ... или утилиту curl.

  2. Захват и вывод содержимого потока ошибок.


Я не думаю, что это является причиной ваших проблем, но это не так или иначе:

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

Вы пишете к API, который ожидает текст (JSON). Поэтому вы должны использовать , а не поток данных (двоичный):

Writer wr = new OutputStreamWriter(con.getOutputStream(), "LATIN-1"); 
wr.write(query); 
wr.flush(); 
Смежные вопросы