Java Yahoo YQL错误请求
我正在尝试使用Yahoo内容分析,使用包含文本的文件作为输入。所以每个字符和长度都是可能的。 这段代码使用一个简单的文本字符串(没有特殊字符,短文本),但是当我使用较长的文本或特殊字符时,我会收到一个错误的请求错误(HTTP 400),有时会显示一条错误消息,如“字符“[”处没有可行的替代方案”或没有错误消息。 我对每个请求进行编码,HTTP Post不应该对长度有任何限制。 Yahoo服务是否对请求的长度进行了限制和/或是否存在无法处理的字符? 任何帮助,以帮助这项工作是感激的 以下是我的代码(使用commons httpclient):Java Yahoo YQL错误请求,java,http-post,yahoo,yql,Java,Http Post,Yahoo,Yql,我正在尝试使用Yahoo内容分析,使用包含文本的文件作为输入。所以每个字符和长度都是可能的。 这段代码使用一个简单的文本字符串(没有特殊字符,短文本),但是当我使用较长的文本或特殊字符时,我会收到一个错误的请求错误(HTTP 400),有时会显示一条错误消息,如“字符“[”处没有可行的替代方案”或没有错误消息。 我对每个请求进行编码,HTTP Post不应该对长度有任何限制。 Yahoo服务是否对请求的长度进行了限制和/或是否存在无法处理的字符? 任何帮助,以帮助这项工作是感激的 以下是我的代码
我认为问题在于,当您以HTTP POST的形式发送请求时,YQL查询和文本都包含在URL中。YQL实际上没有直接发出HTTP POST请求的方法,因此我可以考虑几个选项:
标记来运行可执行POST()的自定义JavaScript在这些选项中,我认为前者会更容易。如果我将查询作为如下参数发布:method.addParameter(“q”,“select*from contentanalysis.analyze where text='”+fileInput+“”),这似乎是可行的;当然,这意味着您必须手动转义引号。我可以想出一些可能的原因来解释为什么前面的代码不起作用:-URL太长,无法为Yahoo API处理,尽管URL长度不应该有任何实际限制。-无论如何,在使用URLEncoder之前不转义引号谢谢您的帮助!
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);