java - Bing Autosuggest api for an android app,但它给出的响应代码为 404 并且找不到资源,但相同的代码在 java 编译器中工作正常
问题描述
我想在 android 应用程序中使用 Bing Autosuggest API。我使用了此处记录的代码:- https://docs.microsoft.com/en-us/azure/cognitive-services/Bing-Autosuggest/quickstarts/java 在运行/编译相同的代码时代码工作正常简单的java编译器:- https://www.onlinegdb.com/online_java_compiler
我的应用程序能够在网络视图中打开网址https://api.cognitive.microsoft.com/bing/v7.0/Suggestions/?subscription-Key=my_key&q=india (这意味着在应用程序)。Android 需要在一个单独的线程中调用它,这就是我在这里使用 Async 的原因。
对于下面的代码,第一个 URL 工作正常(响应代码为 200),但第二个给出的响应代码为 404。
两者都可以在浏览器中使用其确切的 url 链接打开
url = new URL("https://api.bing.com/osjson.aspx?query=abcd");
url = new URL("https://api.cognitive.microsoft.com/bing/v7.0/Suggestions/?mkt=en-IN&subscription-Key=key&q=india");
HttpsURLConnection connection = null;
connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
int HttpsREsult = connection.getResponseCode();
如文档中所述,我编写的代码如下:-
在Android中,代码编写如下:-
public class bing_ac_main extends AsyncTask<String,Void,String> {
protected String subscriptionKey = "my key";
protected String host = "https://api.cognitive.microsoft.com";
protected String path = "/bing/v7.0/Suggestions";
protected String mkt = "en-IN";
protected String query = "sail";
@Override
protected String doInBackground(String... strings) {
String encoded_query = null;
try {
encoded_query = URLEncoder.encode (query, "UTF-8");
String params = "?mkt=" + mkt + "&q=" + encoded_query;
URL url = new URL (host + path + params);
HttpsURLConnection connection = null;
connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Ocp-Apim-Subscription-Key", subscriptionKey);
connection.setDoOutput(true);
int HttpsREsult = connection.getResponseCode();
String Httpsstring= connection.getResponseMessage();
.......
在在线编译器中,我在函数中编写了相同的代码:-
public static String getResponse(){
String subscriptionKey = "my key";
String host = "https://api.cognitive.microsoft.com";
String path = "/bing/v7.0/Suggestions";
String mkt = "en-IN";
String query = "ind";
String encoded_query = null;
try {
encoded_query = URLEncoder.encode (query, "UTF-8");
String params = "?mkt=" + mkt + "&q=" + encoded_query;
URL url = new URL (host + path + params);
HttpsURLConnection connection = null;
connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Ocp-Apim-Subscription-Key", subscriptionKey);
connection.setDoOutput(true);
int HttpsREsult = connection.getResponseCode();
.....
}
我预计 HttpsResult 应该是 200,但在 android 中实际输出是 404。我在相同代码的在线编译器中将 HttpsResult 设为 200,这是正确的
解决方案
推荐阅读
- amazon-web-services - 如何从头开始在云实例中部署 Java 应用程序到高级架构?
- java - Java SoftReference 奇怪的行为
- xamarin - 显示弹出窗口的问题
- javascript - 如何在从单独的文件加载自定义 javascript 之前从反应中加载所有提取
- python - 将文件名的标题添加到csv
- python - 如何在 Python 中将 20 只海龟放在一个圆圈上?
- google-apps-script - Google Apps 脚本执行但不会向 SMS 服务发送请求
- swift - SpriteKit 精灵在碰撞时闪烁
- python - 非 ASCII 的比较仅在 IDLE 中有效
- node.js - Node 中的 http 和 https 模块有什么作用?