Я хочу использовать Bing Autosuggest API в приложении для Android. Я использовал документированный код отсюда: - https://docs.microsoft.com/en-us/azure/cognitive-services/Bing-Autosuggest/quickstarts/java
Код работает нормально, когда запускается / компилируется тот же код в простом компиляторе Java: - https://www.onlinegdb.com/online_java_compiler
Мое приложение может открыть URL-адрес https://api.cognitive.microsoft.com/bing/v7.0/Suggestions/?subscription-Key=my_key&q=india в веб-представлении (что означает, что в приложении нет проблем с Интернетом). Android должен вызывать это в отдельном потоке, поэтому я использовал Async, здесь.
Для приведенного ниже кода первый URL работает нормально (код ответа 200), а второй дает код ответа 404.
И то, и другое можно открыть в браузере с их точной ссылкой
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, но фактический результат равен 404 в Android.
Я получаю HttpsResult как 200 в онлайн-компиляторе для того же кода, который является правильным