Bing Autosuggest API для приложения Android, но он дает код ответа как 404 и ресурс не найден, но тот же код работает нормально в компиляторе Java - PullRequest
0 голосов
/ 18 июня 2019

Я хочу использовать 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 в онлайн-компиляторе для того же кода, который является правильным

...