2015-10-26 1 views
0

Если я сделать это с переднего конца следующие работает нормальноYQL: Сервер вернул код ответа HTTP: 400 для URL

var symbol = symbolsarray[i].trim(); 
    var query = "select * from yahoo.finance.quotes where symbol = " + "'" + symbol + "'"; 
    var yql = "http://query.yahooapis.com/v1/public/yql?q=" + escape(query) + "&format=json&diagnostics=false&env=store://datatables.org/alltableswithkeys&callback=?"; 

Я попробовал сделать то же самое с Явы этот путь

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.URL; 

public class JSONfunctions { 
    public static void main(String args[]) { 
     getQuote(); 
    } 

    private static Double getQuote() { 
     try { 
      // URL url = new 
      // URL("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20%3D%20%27%255EHSI%27&format=json&diagnostics=false&env=store://datatables.org/alltableswithkeys&callback=jQuery1830024542473256587982_1445857302444"); 

      String symbol = "%5EAORD"; 
      String query = "select * from yahoo.finance.quotes where symbol = " 
        + "'" + symbol + "'"; 

      String yql = "http://query.yahooapis.com/v1/public/yql?q=" 
        + query 
        + "&format=json&diagnostics=false&env=store://datatables.org/alltableswithkeys&callback=?"; 

      URL url = new URL(yql); 

      BufferedReader reader = new BufferedReader(new InputStreamReader(
        url.openStream())); 
      String line = reader.readLine(); 
      System.out.println(line); 
      reader.close(); 
     } catch (Exception e) { 
      System.out.println(e.getMessage()); 
     } 
     return null; 
    } 
} 

Но я получаю ответ, как

Server returned HTTP response code: 400 for URL: http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.quotes where symbol = '%5EAORD'&format=json&diagnostics=false&env=store://datatables.org/alltableswithkeys&callback=? 

ответ

1

Кодируется запрос для использования в URL.

String yql = "http://query.yahooapis.com/v1/public/yql?q=" 
       + java.net.URLEncoder.encode(query, "UTF-8") 
       + "&format=json&diagnostics=false&env=store://datatables.org/alltableswithkeys&callback=?"; 

В вашем запросе есть пробелы, поэтому я подозреваю, что это может быть решением.

+0

Спасибо, что я получаю/**/yql_invalid_callback ({"error": {"lang": "en-US", "description": "Недопустимый параметр обратного вызова JSON yql_invalid_callback"}}); – Kiran

+0

Посмотрите на параметр '' callback''. Вы отправляете значение «?» что неверно. Именно об этом сообщает сообщение об ошибке. – f1sh