Как использовать curl в Android Studio

Обновлено: 24.09.2022

Почти в каждом API показано, как взаимодействовать с API с помощью curl. Поэтому, прежде чем двигаться дальше, давайте немного остановимся и узнаем больше о curl.

Почему скручивание?

Одним из преимуществ REST API является то, что для вызова конечной точки можно использовать практически любой язык программирования. Конечная точка — это просто ресурс, расположенный на веб-сервере по определенному пути.

В каждом языке программирования есть разные способы совершения веб-вызовов. Вместо того, чтобы тратить силы, пытаясь показать, как выполнять веб-вызовы на Java, Python, C++, JavaScript, Ruby и т. д., вы можете просто показать вызов с помощью curl.

Попробуйте использовать curl, чтобы ПОЛУЧИТЬ веб-страницу

Чтобы увидеть пример того, как curl извлекает веб-ресурс, откройте терминал и введите следующее:

Запросы и ответы также включают заголовки

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

Чтобы увидеть заголовок ответа в запросе на завивку, включите в него параметр -i:

Заголовок будет включен над телом ответа:

Чтобы ограничить ответ только заголовком, используйте -I :

Заголовок содержит метаданные об ответе. Вся эта информация передается в браузер, когда вы делаете запрос к URL-адресу в своем браузере (например, когда вы просматриваете веб-страницу в Интернете), но браузер не показывает вам эту информацию. Информацию о заголовке можно просмотреть с помощью консоли инструментов разработчика Chrome на вкладке "Сеть".

Теперь давайте укажем метод. Метод GET (чтение) подразумевается по умолчанию, когда не указан другой метод, но здесь мы сделаем его явным с параметром -X:

Распаковка запроса curl API погоды

Давайте более подробно рассмотрим запрос, который вы отправили для прогноза погоды в предыдущей теме (Вызов скручивания):

(В приведенном выше коде замените APIKEY вашим фактическим ключом API.)

curl содержит сокращенные названия различных параметров, которые вы включаете в свой запрос.

Вот что означают команды:

-X ПОЛУЧИТЬ . -X означает метод, используемый для запроса. Общие варианты: GET, POST, DELETE, PUT. (Вместо этого вы также можете увидеть --get . Большинство команд curl имеют несколько разных представлений. -X GET также можно записать как --get .)

-Ч . Отправляет пользовательский заголовок. Включите дополнительный -H для каждой отправляемой пары "ключ-значение" в заголовке.

Строки и параметры запроса

Параметры почтового индекса ( zip ), идентификатора приложения ( appid ) и единиц измерения ( unit ) были переданы в конечную точку с помощью «строк запроса». ? добавленный к URL-адресу, указывает на начало строки запроса. Параметры строки запроса — это параметры, которые появляются после знака ? :

(В приведенном выше коде замените APIKEY вашим фактическим ключом API.)

После строки запроса каждый параметр отделяется от других параметров амперсандом &. Порядок параметров строки запроса не имеет значения. Порядок имеет значение только в том случае, если параметры находятся слева от строки запроса (и, следовательно, являются частью самого URL). Любые настраиваемые части конечной точки, которые появляются перед строкой запроса, называются параметрами пути (мы рассмотрим их позже).

Распространенные команды curl, связанные с REST

curl имеет множество возможных команд, но следующие наиболее распространены при работе с REST API.

Полный список команд curl, которые вы можете использовать, см. в документации по curl.

Пример команды curl

Вот пример запроса curl, который сочетает в себе некоторые из этих команд:

Кроме того, запрос можно отформатировать с разрывами строк, чтобы сделать его более читабельным:

(Разрывы строк вызывают проблемы в Windows, поэтому я не рекомендую форматировать запросы curl таким образом.)

Заголовок Accept сообщает серверу, что единственным форматом, который мы примем в ответе, является JSON.

Проверьте себя

Проверьте себя, чтобы узнать, как много вы помните. Что означают следующие параметры?

При использовании curl Терминал и iTerm на Mac значительно упрощают работу по сравнению с командной строкой в ​​Windows. Если вы собираетесь серьезно заняться документацией по API, но все еще используете ПК, подумайте о переходе. Есть много утилит, которые вы устанавливаете через терминал, но они просто работают на Mac. Кроме того, если вы живете в Силиконовой долине, использование ПК вместо Mac может заставить вас выглядеть старомодно (см. Почему большинство стартапов покупают MacBook для своих сотрудников?). В качестве альтернативы вы можете запустить Linux в Windows, и вы получите те же возможности терминала (оболочка Bash). Посмотрите этот пример руководства по установке Bash в Windows».

Как лучше использовать инструмент cURL с Android Studio 1.1.x в Windows?потому что на официальном сайте нет надлежащей информации для клиентских инструментов в среде Windows.

Я пытался скачать с официального сайта, но загрузка доступна для Windows 2000/XP. И в отличие от инструмента cURL для Linux, у него есть как бесплатная, так и платная версия для Windows.


@slhck, Да, я понял, что ты сказал. Пожалуйста, смотрите мои комментарии. или я изменю английский текст в своих вопросах.

Что конкретно вы подразумеваете под "как лучше"? Из каких альтернатив вы выбираете? Каковы ваши критерии? Я вижу, вы хотели поделиться здесь некоторой информацией, но лучший способ поделиться этой информацией — улучшить существующую информацию в связанном дубликате, а не публиковать новый вопрос. Вы можете сделать это, предложив редактирование ответов или комментируя. Спасибо за понимание.

2 ответа 2

Вот прямые ссылки на текущие версии

К сожалению, ссылка msi для Windows ведет на немного сомнительный веб-сайт, который пытается заставить вас заплатить или загрузить сомнительный загрузчик.

Эти ссылки устареют, так что покупатель должен быть осторожен.

да, вы правильно сказали, это привело меня на сомнительный веб-сайт без надлежащей правильной информации для среды Windows.

О каком именно подозрительном веб-сайте вы говорите? Когда я перехожу к curl.haxx.se/download.html и щелкаю ссылки Win64/Generic, они выглядят нормально.

3) лучший способ использовать инструмент cURL — запустить его в среде Linux. cURL — это инструмент для передачи данных по различным протоколам с использованием синтаксиса URL. Его можно использовать в командной строке Windows, это был проект в среде Linux. Одной из полезных и мощных функций cURL также является отправка данных GET и POST в онлайн-формы.

4) Также обратите внимание на комментарии @Toby Allen ==> "К сожалению, самая заметная ссылка на зеркало для Windows ведет на немного сомнительный веб-сайт, который пытается заставить вас заплатить/загрузить сомнительный загрузчик"

TL;DR

Всем, кому нужны только предварительно скомпилированные статические библиотеки openssl и curl, ознакомьтесь с этим репозиторием robertying/openssl-curl-android и его выпусками.

Примечание.

Способ компиляции библиотек сильно изменился с тех пор, как я написал этот пост. Следующее служит только для демонстрации идей. Пожалуйста, обратитесь к robertying/openssl-curl-android для получения последних рабочих скриптов.

Компиляция openssl и curl может быть естественным запросом, если вы интегрируете некоторые библиотеки C в свой проект Android. Android использует четыре ABI, которые несовместимы с современными настольными средами, поэтому нам придется кросс-компилировать эти библиотеки, чтобы иметь возможность запускать их на мобильных устройствах.

Кросс-компилятор

Кросс-компиляция, как правило, выполняется легко, если у нас есть правильный кросс-компилятор. Какой кросс-компилятор у нас есть для Android? Он включен в НДК! После установки NDK вы найдете соответствующие кросс-компиляторы внутри его пакета.

Для пользователей macOS он будет расположен в $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/$HOST_TAG, где $ANDROID_NDK_HOME — это путь к пакету ndk, а $HOST_TAG — идентификатор вашей ОС. Найдите свой $HOST_TAG в документации Android NDK.

Система сборки на основе Autotool

Мы можем создать несколько простых файлов C вместе с кросс-компилятором. Однако openssl и curl — это сложные и большие проекты, использующие систему сборки, подобную GNU-autotools. Это означает, что нам по-прежнему нужно использовать их собственную систему сборки и правильно настроить, чтобы окончательный двоичный файл был собран для Android ABI.

открывает

curl нужна библиотека SSL, поэтому сначала мы создадим openssl.

Инструкции по сборке можно найти в репозитории. Это довольно подробно. Просто следуйте инструкциям, и вы сможете скомпилировать библиотеку.

Вот один из моих скриптов:

Несколько предостережений:

  1. Использование llvm кажется более предпочтительным, если вы компилируете на macOS, поэтому поместите $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/$HOST_TAG/bin в PATH . Тогда автоинструменты смогут использовать правильный компилятор для работы.
  2. Соответствующие аргументы для четырех ABI: android-arm64 , android-arm , android-x86 и android-x86_64 .
  3. Если вам нужна статическая библиотека, в Configure можно добавить параметр no-shared.
  4. Обратите внимание, как вызывается ./Configure -- нет тире или имени параметра.
  5. Добавьте --prefix, потому что мы не хотим, чтобы библиотека устанавливалась в системе по умолчанию.

После вызова Configure автоинструменты сгенерируют правильные файлы Makefile для ABI.

Вы увидите все include, lib и bin в префиксном каталоге.

curl использует не Configure для генерации Makefile, а аналогичный configure с именем configure .

Прежде всего нам нужно сгенерировать специальный заголовочный файл, чтобы продолжить сборку.

Бежать./buildconf в каталоге curl, иначе вы получите сообщение об ошибке not found для curl_config.h, потому что оно сгенерировано buildconf . Просто запустите его на относительно короткое время и завершите процесс, curl_config.h будет доступен.

Создать curl немного сложнее, чем с openssl . Нам нужно сначала объявить все инструменты кросс-компиляции, чтобы они заработали.

Например, для компиляции с ABI arm64 нам нужно сначала экспортировать следующие переменные среды:

SSL_DIR предназначен для поиска openssl, если мы хотим позже использовать SSL с curl.

Тогда у нас есть стандартный способ автоинструментов:

Здесь мы скомпилировали только статические файлы. Создание общих библиотек с некоторыми ARM ABI может вызвать проблемы. Это может быть ошибка в цепочках инструментов NDK, поэтому я рекомендую придерживаться статических.

Вы можете продолжить добавлять дополнительные параметры для отключения функций, уменьшая размер библиотеки.

jni-curl-lib — это пример, показывающий, как управлять сторонними библиотеками C/C++ с помощью Android Studio.

В этом примере используется подключаемый модуль Android Studio CMake с поддержкой внешней библиотеки. В нем показано, как:

  • включите в приложение встроенную статическую библиотеку (gmath)
  • включите в приложение встроенную общую библиотеку (gperf)

Пример включает 2 модуля:

  • app -- импортирует общую библиотеку (libgperf.so) и статическую библиотеку (libgmath.a) из папки дистрибутива
  • gen-libs – содержит исходный код и скрипт сборки CMake для примеров библиотек gmath и gperf. Полученные бинарники копируются в папку дистрибутива. По умолчанию модуль gen-libs отключен в settings.gradle и app/build.gradle, поэтому он не будет отображаться в Android Studio IDE. Если желательно повторно сгенерировать библиотеку, следуйте комментариям в settings.gradle и app/build.gradle, чтобы включить этот модуль, сгенерировать библиотеки, а затем снова отключить его, чтобы избежать ненужной путаницы.

Основная цель примера — продемонстрировать, как использовать сторонние библиотеки, а не продемонстрировать создание пакетов библиотек. С этой целью готовые библиотеки включены в папку дистрибутива.

При импорте библиотек в ваше приложение включите в файл CMakeLists.txt вашего приложения следующее (в следующем порядке):

  • импортировать библиотеки как статические или общие (используя add_library )
  • настроить двоичное расположение каждой библиотеки (используя set_target_properties )
  • настроить расположение заголовков каждой библиотеки (используя target_include_directories )

Для общих библиотек уведомите Gradle, чтобы они упаковались в APK. Одним из простых способов является включение общего каталога lib в каталог jniLibs приложения:

  • Нажмите Загрузить или Выберите расположение NDK.
  1. Нажмите Инструменты/Android/Синхронизировать проект с файлами Gradle.
  2. Нажмите Запустить/Запустить приложение.

screenshot

Если вы обнаружили ошибку в этих примерах, отправьте сообщение о проблеме.

Внесение исправлений приветствуется, и их можно отправить, разветвив этот проект и отправив запрос на вытягивание через GitHub. Подробнее см. CONTRIBUTING.md.

Авторское право 2015 Google, Inc.

Лицензировано Apache Software Foundation (ASF) в соответствии с одним или несколькими лицензионными соглашениями участников. Дополнительную информацию об авторских правах см. в файле NOTICE, распространяемом вместе с этой работой. ASF предоставляет вам лицензию на этот файл в соответствии с лицензией Apache версии 2.0 ("Лицензия"); вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Вы можете получить копию Лицензии по адресу

Если это не требуется применимым законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое в соответствии с Лицензией, распространяется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых. См. Лицензию для конкретного языка, регулирующего разрешения и ограничения в рамках Лицензии.

Читайте также: