【问题标题】:Yahoo YQL bad request雅虎 YQL 错误请求
【发布时间】:2023-03-15 04:53:01
【问题描述】:

我正在尝试使用包含文本作为输入的文件来使用 Yahoo Content Analysis。所以每个字符和长度都是可能的。 此代码适用于简单的文本字符串(无特殊字符,短文本),但是当我使用较长的文本或特殊字符时,我会收到错误请求错误(HTTP 400),有时会出现错误消息,例如“在字符 '[' 处没有可行的替代方案” " 或没有错误信息。 我对每个请求进行编码,HTTP Post 不应该对长度有任何限制。 雅虎服务是否限制了请求的长度和/或是否有任何字符无法处理? 感谢您对这项工作的任何帮助!

这是我的代码(使用 commons-httpclient):

    String fileInput = FileUtils.readFileToString(f);

    StringBuilder builder = new StringBuilder();
    builder.append("http://query.yahooapis.com/v1/public/yql?");
    System.out.println(fileInput);
    builder.append("q=")
            .append(URLEncoder.encode("select * from contentanalysis.analyze where text='"+ fileInput +"'" , "UTF-8"))
            .append("&format=json");

    final String postUrl = builder.toString();
    HttpClient client = new HttpClient();
    PostMethod method = new PostMethod(postUrl);

    // Send POST request
    int statusCode = client.executeMethod(method);

【问题讨论】:

    标签: java http-post yahoo yql


    【解决方案1】:

    我认为问题在于,当您将请求作为 HTTP POST 发送时,YQL 查询和文本都包含在 URL 中。 YQL 并没有让你直接发出 HTTP POST 请求的方法,所以我可以想到几个选项:

    1. 通过 HTTP POST (docs) 直接使用 Content Analysis Web 服务
    2. 创建一个自定义 YQL 数据表,它使用 <execute> 标签运行自定义 JavaScript,可以执行 POST (example)

    在这些选项中,我认为前者会更容易。

    【讨论】:

    • 如果我将查询作为这样的参数发布,这似乎有效:method.addParameter("q", "select * from contentanalysis.analyze where text='"+ fileInput +"'") ;当然,这意味着您必须手动转义引号。我可以想到之前的代码不起作用的几个可能原因: - URL 太长而无法为 Yahoo API 处理,尽管 URL 长度不应该有任何真正的限制。 - 在使用 URLEncoder 之前不要转义引号无论如何感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2016-04-27
    • 2018-02-18
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多