В ответе JSON API неправильно указано, что мой ключ API имеет ограничение IP - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь загрузить файлы через curl с помощью ключа API. Я создал ключ API без ограничений приложения, но с ограничениями API только для хранилища:

enter image description here

Однако, когда я пытаюсь загрузить файл с помощью curl, я получаю такой ответ:

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "ipRefererBlocked",
    "message": "There is a per-IP or per-Referer restriction configured on your API key and the request does not match these restrictions. Please use the Google Developers Console to update your API key configuration if request from this IP or referer should be allowed.",
    "extendedHelp": "https://console.developers.google.com"
   }
  ],
  "code": 403,
  "message": "There is a per-IP or per-Referer restriction configured on your API key and the request does not match these restrictions. Please use the Google Developers Console to update your API key configuration if request from this IP or referer should be allowed."
 }
}

Я уверен, что использую правильный ключ API. У меня есть только один, и если я сделаю запрос и немного подожду, «Общее использование (последние 30 дней)» на странице конфигурации ключа возрастет на единицу. Если я не интерпретирую это неправильно, сообщение об ошибке просто не точно. Я выбрал «Нет» в разделе «Приложения». Я пытался сделать другие ключи, но мне не повезло.

Вот моя команда curl

curl -X POST --data-binary @$file_name \
-H "Content-Type: application/tar" \
-H "Content-Encoding: gzip" \
"https://www.googleapis.com/upload/storage/v1/b/my_bucket_name/o?uploadType=media&name=$object_name&key=$gcp_api_key"

Есть идеи, что может быть не так?

1 Ответ

1 голос
/ 02 мая 2019

Я не уверен, зачем нужен такой API-ключ, но согласно документации он не будет работать, так как это ограничение (хотя я его не пробовал). Документация GCS (вкладка REST API) не содержит ключа API (key = [API_KEY]). Я попытался загрузить в GCS, используя образец в документации, и он работал без какого-либо API-ключа, что вам действительно нужно, так это OAUTH2_TOKEN. Вы можете получить токен, напечатав его «gcloud auth application-default print-access-token».

curl -X POST --data-binary test.jpeg \
     -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
     -H "Content-Type: image/jpeg" \
     "https://www.googleapis.com/upload/storage/v1/b/[your bucket name]/o?uploadType=media&name=test.jpeg"
...