Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HTTP请求已正确发送,但返回的值/结果不正确_Java_Apache_Http_Bing_Microsoft Cognitive - Fatal编程技术网

Java HTTP请求已正确发送,但返回的值/结果不正确

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

我正在尝试使用GET请求向bing的拼写检查api发送http请求。我在上检查了我的参数和标题,它返回了一个正确的json,其中包含正确的拼写错误,但是当我从java应用程序发送请求时,它返回的json没有检测到拼写错误(因此,文本参数必须为空)。我肯定在头中传递了正确的密钥,因为该部分没有发送错误,代码是200(成功)

我的弦乐:“我的风琴在折磨我”

我的代码返回:

{"_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结果。因此,问题根本不在密钥中,因为这些密钥正在该网站上成功传递。