Nano Hash - криптовалюты, майнинг, программирование

API Google Книг для Android: доступ не настроен

Я использую KEY API Google Books для Android для загрузки данных книги через мое приложение для Android. Но я получаю ошибку, указанную ниже.

Однако - запрос работает, если я удаляю сертификаты из моей API-КОНСОЛИ (например, делаю API-КЛЮЧ приемлемым для всех приложений). Хотя моя информация {SHA1};{имя пакета}, которую я указал, верна. - Это работает, если вместо этого я использую API KEY для браузера.

Следовательно, что я могу понять, я не могу отправить KEY как часть URL-адреса в методе httpclient. Может быть, мне нужно отправить через заголовок или что-то в этом роде. Но не могу найти как.

Кто-нибудь может помочь, пожалуйста?

КОД:

String link = "https://www.googleapis.com/books/v1/volumes?key=MY_KEY&q="+query+"&projection=full&langRestrict=en&maxResults=1";
HttpGet get = new HttpGet(link);
HttpParams httpParameters = new BasicHttpParams();
int timeoutConnection = 10000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
HttpConnectionParams.setSoTimeout(httpParameters, timeoutConnection);
HttpClient httpclient = new  DefaultHttpClient(httpParameters);
HttpResponse response = httpclient.execute(get);
HttpEntity entity = response.getEntity();

Запрос:

https://www.googleapis.com/books/v1/volumes?key=MY_API_KEY&q=intitle:'The+Old+Man+And+The+Sea'+inauthor:'Ernest+Hemingway'&projection=full&langRestrict=en&maxResults=1

Результат:

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "accessNotConfigured",
    "message": "Access Not Configured"
   }
  ],
  "code": 403,
  "message": "Access Not Configured"
 }
}

Ответы:


1

Для кого это может касаться ... Я отправляю свой ключ API в заголовке, и теперь он работает ... Я не уверен, что это правильный путь к нему ...

String link = "https://www.googleapis.com/books/v1/volumes?q="+params;
            InputStream is = null;
            try 
            {
                int timeoutConnection = 10000;
                URL url = new URL(link);
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                con.setConnectTimeout(timeoutConnection);
                con.setReadTimeout(timeoutConnection);
                con.setRequestProperty("key", "API_KEY");
                if(con.getResponseCode() != HttpURLConnection.HTTP_OK){
                    publishProgress("Error conneting.");
                }
                is=con.getInputStream();
            }
05.01.2014
  • Спасибо! На самом деле это неправильно задокументировано, поскольку в документах API книг говорится, что ключ разработчика вполне может быть указан как GET-Param. Но похоже, что он работает только как параметр заголовка. Вот сообщение SO о том, как установить заголовки с помощью Volley: stackoverflow.com/questions/17049473/ 14.08.2014

  • 2

    Предоставление ключа в заголовке равносильно его полному отсутствию. Проверьте консоль API разработчика, и вы не увидите успешных запросов с этим ключом API. Короче говоря, ключ API в заголовке не решает проблему. Если вы не хотите играть по правилам Google, просто выполните запрос вообще без ключа.

    08.05.2015

    3

    Вы можете добиться того же результата принятого ответа, используя HttpGet:

    String API_KEY = "..."; // Google Books API Public key
    String ISBN = "...";
    String bookSearchString = "https://www.googleapis.com/books/v1/volumes?q=isbn:" + ISBN;
    HttpClient bookClient = new DefaultHttpClient();
    try
    {
        //get the data
        HttpGet bookGet = new HttpGet(bookSearchURL);
        bookGet.addHeader("key", API_KEY);
        HttpResponse bookResponse = bookClient.execute(bookGet);
        StatusLine bookSearchStatus = bookResponse.getStatusLine();
        if (bookSearchStatus.getStatusCode() == 200)
        {
            //we have a result
            HttpEntity bookEntity = bookResponse.getEntity();
    
            ...
    
        }
    } catch (Exception e)
    {
        e.printStackTrace();
    }
    
    11.01.2015

    4

    Обратите внимание, что использование ключа Google API без ограничений — это insecure способ!

    Очевидно, что если с вас взимается плата за доступ к данным API, вы не хотите, чтобы кто-то декомпилировал ваш APK, нашел ваш ключ API, а затем начал использовать его в своих собственных приложениях.

    Как скрыть свой ключ API в Android?

    Но этого недостаточно. Вы можете где-нибудь хранить свой API-ключ, чтобы кто-то тоже мог его найти.

    Чтобы защитить ключ Google Cloud API для вашего приложения для Android, вы должны ограничить его использование только из своего приложения. Подробнее см. здесь.

    После ключа ограничения вы должны указать имя пакета приложения для Android и отпечаток сертификата SHA-1 в заголовке каждого запроса, который вы отправляете в Google. Как это сделать?

    Это все, что вам нужно! :D

    17.03.2017
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..