Java HTTP请求已正确发送,但返回的值/结果不正确
我正在尝试使用GET请求向bing的拼写检查api发送http请求。我在上检查了我的参数和标题,它返回了一个正确的json,其中包含正确的拼写错误,但是当我从java应用程序发送请求时,它返回的json没有检测到拼写错误(因此,文本参数必须为空)。我肯定在头中传递了正确的密钥,因为该部分没有发送错误,代码是200(成功) 我的弦乐:“我的风琴在折磨我” 我的代码返回:Java HTTP请求已正确发送,但返回的值/结果不正确,java,apache,http,bing,microsoft-cognitive,Java,Apache,Http,Bing,Microsoft Cognitive,我正在尝试使用GET请求向bing的拼写检查api发送http请求。我在上检查了我的参数和标题,它返回了一个正确的json,其中包含正确的拼写错误,但是当我从java应用程序发送请求时,它返回的json没有检测到拼写错误(因此,文本参数必须为空)。我肯定在头中传递了正确的密钥,因为该部分没有发送错误,代码是200(成功) 我的弦乐:“我的风琴在折磨我” 我的代码返回: {"_type":"SpellCheck","flaggedTokens":[]} { "_type":"Spell
{"_type":"SpellCheck","flaggedTokens":[]}
{
"_type":"SpellCheck",
"flaggedTokens":[
{
"offset":3,
"token":"funger",
"type":"UnknownToken",
"suggestions":[
{
"suggestion":"finger",
"score":0.903614003311793
}
]
},
{
"offset":13,
"token":"harting",
"type":"UnknownToken",
"suggestions":[
{
"suggestion":"hurting",
"score":0.903614003311793
}
]
}
]
}
它返回:
{"_type":"SpellCheck","flaggedTokens":[]}
{
"_type":"SpellCheck",
"flaggedTokens":[
{
"offset":3,
"token":"funger",
"type":"UnknownToken",
"suggestions":[
{
"suggestion":"finger",
"score":0.903614003311793
}
]
},
{
"offset":13,
"token":"harting",
"type":"UnknownToken",
"suggestions":[
{
"suggestion":"hurting",
"score":0.903614003311793
}
]
}
]
}
这是我使用Apache的HTTPClient库编写的java代码:
(注意:“command.getAfter()”是我上面提到的传递字符串。我对它进行了调试,甚至硬编码了一个字符串来测试它。显然是相同的输出。)
编辑:结果是请求对象中返回的URI返回以下内容:
那么参数不是空的?但是当在hull.it中没有输入文本参数时,api返回一个没有参数的错误。当text参数为空格“”时,它会将相同的结果返回给mine。不确定这意味着什么,因为URI似乎是有效的,不是空的,我的订阅密钥正在工作,因为如果它不是
编辑:我开始怀疑Apache库忽略了我在HttpGet(uri)中传递的参数。我不确定,但我将尝试另一种解决方案来发送带有标题的请求,看看会发生什么
编辑:我尝试了以下代码:
String url = "https://api.cognitive.microsoft.com/bing/v5.0/spellcheck/?text=" + command.getAfter().replace(" ", "+");
try {
URL request_url = new URL(url);
//URIBuilder uri = new URIBuilder("https://api.cognitive.microsoft.com/bing/v5.0/spellcheck/");
//uri.setParameter("text", command.getAfter());
HttpURLConnection con = (HttpURLConnection) request_url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Ocp-Apim-Subscription-Key", Keys.BING_SPELL_CHECK_API);
con.setConnectTimeout(100000);
con.setReadTimeout(100000);
con.setInstanceFollowRedirects(true);
String theString = IOUtils.toString(con.getInputStream(), "UTF-8");
System.out.println(theString);
} catch (IOException e) {
e.printStackTrace();
}
它返回与Apache one相同的结果…:/我还应该尝试什么
编辑:
这也是请求的输出:
https://api.cognitive.microsoft.com/bing/v5.0/spellcheck/?text=my+funger+is+hartingme - [Ocp-Apim-Subscription-Key: <XXXXXXXXXXXX>]
HTTP/1.1 200 OK - en_US
{"_type": "SpellCheck", "flaggedTokens": []}
v5.0并非如此。我正在从Azure门户获取正确的密钥。(名为“键”的页面列出了2个可以使用和重新生成的键)如何让v7.0正常工作: v5.0并非如此。我正在从Azure门户获取正确的密钥(名为Keys的页面列出了2个可以使用和重新生成的Keys) 每个版本有2个密钥。因此,如果您看到两个键,它们很可能都适用于v5.0。它应该明确提到v7.0。 应该有不同的部分,也有不同的端点。
将它们结合使用以获得所需的结果。request.getURI()的输出是什么?@JeremiahMegel我刚刚检查过。我可能传递的参数不正确吗?你的代码适合我。我正在使用JDK1.8和
httpclient-4.5.3.jar
和httpcore-4.4.7.jar
和commons-logging-1.2.jar
不正确。这是整个钥匙页。我的仪表板中的端点仅显示v5.0。没有其他端点或选项卡表示不存在。注意:我的键和链接在hull.it上返回了正确的JSON结果。因此,问题根本不在密钥中,因为这些密钥正在该网站上成功传递。