【问题标题】:yql : Server returned HTTP response code: 400 for URLyql : 服务器返回 HTTP 响应代码: 400 for URL
【发布时间】:2015-10-26 11:45:46
【问题描述】:

如果我从前端执行此操作,则以下工作正常

  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=?";

我试过用这种方式从java做同样的事情

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=?

【问题讨论】:

    标签: java yql


    【解决方案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=?";
    

    您的查询包含空格,所以我怀疑这可能是一个解决方案。

    【讨论】:

    • 谢谢你现在我得到 /**/yql_invalid_callback({"error":{"lang":"en-US","description":"无效的 JSON 回调参数 yql_invalid_callback"}}) ;
    • 看一下参数callback。您正在发送值“?”这是不正确的。这正是错误消息告诉您的内容。
    • 我遇到了同样的错误。此查询始终将回调设置为“?”但似乎一夜之间就辞职了。
    • 原来我的问题是因为雅虎的服务宕机了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    相关资源
    最近更新 更多