11 примеров использование команд curl в режиме реального времени

Location header

When a resource is requested from a server, the reply from the server may include a hint about where the browser should go next to find this page, or a new page keeping newly generated output. The header that tells the browser to redirect is .

Curl does not follow headers by default, but will simply display such pages in the same manner it displays all HTTP replies. It does however feature an option that will make it attempt to follow the pointers.

To tell curl to follow a Location:

If you use curl to POST to a site that immediately redirects you to another page, you can safely use () and / together. curl will only use POST in the first request, and then revert to GET in the following operations.

👨‍💻 Создаем запрос к OpenWeatherAPI с помощью curl

  • Предположим, что практическое занятие раздела выполнено, возвращаемся в Postman.
  • В любом запросе кликаем на кнопку под кнопкой
  • В диалоговом окне “Generate Code Snippets” выбираем cURL из выпадающего списка и нажимаем на кнопку

Код Postman для запроса прогноза погоды OpenWeatherMap выглядит в формате cURL следующим образом:

Postman добавил свою информацию о хедере (обозначено -Н) Тэги добавленного заголовка можно удалить. Также можно удалить знаки “», они добавлены для читаемости текста.

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

Вот запрос curl с удаленными символами -H и обратной косой чертой, а одинарные кавычки преобразованы в двойные кавычки:

  • Curl доступен на MacOS по умолчанию. Если на Windows curl еще не установлен, то инструкции по установке по , нужно выбрать одну из бесплатных версий с правами Администратора.
  • Открываем терминал
    • на OS Windows нажимаем и вводим команду , Правой кнопкой мыши вызываем меню и выбираем для вставки запроса.
    • на MacOS открываем iTerm или терминал, нажимая и вводим команду Вставляем запрос в командную строку и жмем кнопку .

Ответ от OpenWeatherMap на наш запрос будет выглядеть так:

Этот запрос минимизирован. Вы можете развернуть его, например на сайте JSON pretty print или, на MacOS с установленным Python добавив в конец cURL запроса, чтобы минимизировать JSON в ответе (Для подробностей можно посмотреть ветку на Stack Overflow по этой теме).

Самостоятельно сделаем curl запрос на 5-дневный прогноз, сохраненный в Postman. И третий API запрос OpenWeatherMap? сохраненный в Postman тоже выполняем в curl

cURL запросы через прокси

Простой пример для отправки запросов через proxy. Если ваш прокси предполагает авторизацию, то раскомментируйте соответствующие строчки.

$url = 'http://dynupdate.no-ip.com/ip.php'; // тут мы можем узнать свой IP адрес
$proxy = '127.0.0.1:8888';
//$proxyauth = 'user:password'; // если прокси с авторизацией, то раскомметируйте

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth); // если прокси с авторизацией, то раскомметируйте
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$html = curl_exec($ch);
curl_close($ch);

echo $html;

85 Operating Systems

AIX, AmigaOS, Android, Aros, BeOS, Blackberry 10, Blackberry Tablet OS, Cell OS, ChromeOS, Cisco IOS, Cygwin, Dragonfly BSD, eCOS, FreeBSD, FreeDOS, FreeRTOS, Fuchsia, Garmin OS, Genode, Haiku, HardenedBSD, HP-UX, Hurd, Illumos, Integrity, iOS, ipadOS, IRIX, LineageOS, Linux, Lua RTOS, Mac OS 9, macOS, Mbed, Micrium, MINIX, MorphOS, MPE/iX, MS-DOS, NCR MP-RAS, NetBSD, Netware, Nintendo Switch, NonStop OS, NuttX, OpenBSD, OpenStep, Orbis OS, OS/2, OS/400, OS21, Plan 9, PlayStation Portable, QNX, Qubes OS, ReactOS, Redox, RICS OS, Sailfish OS, SCO Unix, Serenity, SINIX-Z, Solaris, SunOS, Syllable OS, Symbian, Tizen, TPF, Tru64, tvOS, ucLinux, Ultrix, UNICOS, UnixWare, VMS, vxWorks, WebOS, Wii system software, Windows, Windows CE, Xbox System, z/OS, z/TPF, z/VM, z/VSE

How to download website headers with curl

Next, let’s just pull down the headers. This is useful for just checking if a web page is working. If you’re on Linux, OSX/MacOS, CYGWIN, or WSL, the command would be:

curl -s -D - http://54.184.76.36 -o /dev/null

the output should  be similar to this:

HTTP/1.1 200 OKDate: Mon, 12 Feb 2018 15:25:35 GMTServer: ApacheX-Powered-By: PHP/5.5.38Link: ; rel=”https://api.w.org/”, ; rel=shortlinkTransfer-Encoding: chunkedContent-Type: text/html; charset=utf-8

On Windows Powershell, the same command would be:

curl -s -D - http://54.184.76.36 -o $null

Or on Windows CMD, the same command would be:

curl -s -D – http://54.184.76.36 -o nul

Информация о файле curl.exe

Процесс The cURL executable или The curl executable принадлежит программе The cURL executable или The curl executable или ReadCube от cURL, http://curl.haxx.se или curl, https://curl.haxx.se или pepsmich или cURL, https://curl.haxx.se.

Описание: curl.exe не является важным для Windows и часто вызывает проблемы. Curl.exe находится в подпапках «C:\Program Files».
Известны следующие размеры файла для Windows 10/8/7/XP 10,240 байт (50% всех случаев), 937,984 байт или 76,288 байт.  
Приложение не видно пользователям. Это не системный файл Windows. У файла нет информации о создателе этого файла.
Curl.exe способен мониторить приложения.
Поэтому технический рейтинг надежности 73% опасности.

Рекомендуем: Выявление проблем, связанных с curl.exe

  • Если curl.exe находится в подпапках «C:\Users\USERNAME», тогда рейтинг надежности 53% опасности. Размер файла 584,192 байт (25% всех случаев), 591,872 байт, 480,048 байт или 596,992 байт.
    Это не файл Windows. Приложение не видно пользователям. Вы можете удалить ReadCube, или попросить помощи у технической поддержки. Перейдите к ReadCube в Панели управления Windows (раздел Программы и компоненты) для удаления программы, или перейдите к labtiva.com Службе Поддержки Клиентов.
  • Если curl.exe находится в папке C:\Windows, тогда рейтинг надежности 44% опасности. Размер файла 490,496 байт (50% всех случаев) или 2,089,984 байт.
    Это неизвестный файл в папке Windows. Приложение не видно пользователям. Это не файл Windows.
    Curl.exe способен мониторить приложения.
  • Если curl.exe находится в подпапках C:\Windows, тогда рейтинг надежности 66% опасности. Размер файла 2,619,392 байт.

Install cURL

Linux

Most Linux distributions have cURL installed by default. To check whether it is installed on your system or not, type  in your terminal window and press enter. If it isn’t installed, it will show a “command not found” error. Use the commands below to install it on your system.

For Ubuntu/Debian based systems use:

sudo apt update
sudo apt install curl

For CentOS/RHEL systems, use:

sudo yum install curl

On the other hand, for Fedora systems, you can use the command:

sudo dnf install curl

MacOS

MacOS comes with cURL preinstalled, and it receives updates whenever Apple releases updates for the OS. However, in case you want to install the most recent version of cURL, you can install the Homebrew package. Once you install Homebrew, you can install it with:

brew install curl

Windows

For Windows 10 version 1803 and above, cURL now ships by default in the Command Prompt, so you can use it directly from there. For older versions of Windows, the cURL project has Windows binaries. Once you download the ZIP file and extract it, you will find a folder named .  Move this folder into a directory of your choice. In this article, we will assume our folder is named , and we have moved it under .

Next, you should add cURL’s  directory to the Windows  environment variable, so that Windows can find it when you type  in the command prompt. For this to work, you need to follow these steps:

  • Open the “Advanced System Properties” dialog by running  from the Windows Run dialog (Windows key + R).
  • Click on the “Environment Variables” button.
  • Double-click on “Path” from the “System variables” section, and add the path . For Windows 10, you can do this with the “New” button on the right. On older versions of Windows, you can type in  (notice the semicolon at the beginning) at the end of the “Value” text box.

Once you complete the above steps, you can type  to check if this is working. If everything went well, you should see the following output:

C:\Users\Administrator>curl
curl: try 'curl --help' or 'curl --manual' for more information

IPv6

curl will connect to a server with IPv6 when a host lookup returns an IPv6 address and fall back to IPv4 if the connection fails. The and options can specify which address to use when both are available. IPv6 addresses can also be specified directly in URLs using the syntax:

When this style is used, the option must be given to stop curl from interpreting the square brackets as special globbing characters. Link local and site local addresses including a scope identifier, such as , may also be used, but the scope portion must be numeric or match an existing network interface on Linux and the percent character must be URL escaped. The previous example in an SFTP URL might look like:

IPv6 addresses provided other than in URLs (e.g. to the , or options) should not be URL encoded.

Множественный cURL

Одной из самых сильных сторон cURL является возможность создания «множественных» cURL обработчиков. Это позволяет вам открывать соединение к множеству URL одновременно и асинхронно.

В классическом варианте cURL запроса выполнение скрипта приостанавливается, и происходит ожидание завершения операции URL запроса, после чего работа скрипта может продолжиться. Если вы намереваетесь взаимодействовать с целым множеством URL, это приведёт к довольно-таки значительным затратам времени, поскольку в классическом варианте вы можете работать только с одним URL за один раз. Однако, мы можем исправить данную ситуацию, воспользовавшись специальными обработчиками.

Давайте рассмотрим пример кода, который я взял с php.net:

// создаём несколько cURL ресурсов
$ch1 = curl_init();
$ch2 = curl_init();

// указываем URL и другие параметры
curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);

//создаём множественный cURL обработчик
$mh = curl_multi_init();

//добавляем несколько обработчиков
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

$active = null;
//выполнение
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}

//закрытие
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

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

В этом примере есть два основных цикла. Первый цикл do-while вызывает функцию curl_multi_exec(). Эта функция не блокируемая. Она выполняется с той скоростью, с которой может, и возвращает состояние запроса. Пока возвращенное значение является константой ‘CURLM_CALL_MULTI_PERFORM’, это означает, что работа ещё не завершена (например, в данный момент происходит отправка http заголовков в URL); Именно поэтому мы продолжаем проверять это возвращаемое значение, пока не получим другой результат.

В следующем цикле мы проверяем условие, пока переменная $active = ‘true’. Она является вторым параметром для функции curl_multi_exec(). Значение данной переменной будет равно ‘true’, до тех пор, пока какое-то из существующих изменений является активным. Далее мы вызываем функцию curl_multi_select(). Её выполнение ‘блокируется’, пока существует хоть одно активное соединение, до тех пор, пока не будет получен ответ. Когда это произойдёт, мы возвращаемся в основной цикл, чтобы продолжить выполнение запросов.

А теперь давайте применим полученные знания на примере, который будет реально полезным для большого количества людей.

Certificates

In the HTTPS world, you use certificates to validate that you are the one you claim to be, as an addition to normal passwords. Curl supports client- side certificates. All certificates are locked with a pass phrase, which you need to enter before the certificate can be used by curl. The pass phrase can be specified on the command line or if not, entered interactively when curl queries for it. Use a certificate with curl on a HTTPS server like:

curl also tries to verify that the server is who it claims to be, by verifying the server’s certificate against a locally stored CA cert bundle. Failing the verification will cause curl to deny the connection. You must then use () in case you want to tell curl to ignore that the server can’t be verified.

More about server certificate verification and ca cert bundles can be read in the SSLCERTS document.

At times you may end up with your own CA cert store and then you can tell curl to use that to verify the server’s certificate:

Лучшие практики для исправления проблем с curl

Аккуратный и опрятный компьютер — это главное требование для избежания проблем с curl. Для этого требуется регулярная проверка компьютера на вирусы, очистка жесткого диска, используя cleanmgr и sfc /scannow, удаление программ, которые больше не нужны, проверка программ, которые запускаются при старте Windows (используя msconfig) и активация Автоматическое обновление Windows. Всегда помните о создании периодических бэкапов, или в крайнем случае о создании точек восстановления.

Если у вас актуальные проблемы, попробуйте вспомнить, что вы делали в последнее время, или последнюю программу, которую вы устанавливали перед тем, как появилась впервые проблема. Используйте команду resmon, чтобы определить процесс, который вызывает проблемы. Даже если у вас серьезные проблемы с компьютером, прежде чем переустанавливать Windows, лучше попробуйте восстановить целостность установки ОС или для Windows 8 и более поздних версий Windows выполнить команду DISM.exe /Online /Cleanup-image /Restorehealth. Это позволит восстановить операционную систему без потери данных.

Скачать с помощью Curl — командная строка

Если вы новичок в Curl, начните с открытия терминала. Вы можете открыть окно терминала на рабочем столе Linux, нажав  Ctrl + Alt + T  комбинацию клавиш. Вы также можете найти «Терминал» в меню приложения.

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

Скачивание одного файла

Загрузить один файл с помощью Curl очень просто. Для начала необходимо указать URL-адрес файла. Например, чтобы загрузить Ubuntu 20.04 LTS ISO, вы должны указать такой URL-адрес.

curl https://mirror.math.princeton.edu/pub/ubuntu-iso/20.04/ubuntu-20.04.2.0-desktop-amd64.iso

После указания удаленного URL-адреса файла, который вы хотите загрузить, вы должны выбрать место для загрузки. Чтобы указать место загрузки, добавьте символ >  , за которым следует путь, по которому должен идти файл.

Например, чтобы указать вашему ISO-файлу Ubuntu 20.04 LTS загрузку в каталог «Downloads», вы должны добавить .

curl https://mirror.math.princeton.edu/pub/ubuntu-iso/20.04/ubuntu-20.04.2.0-desktop-amd64.iso > ~/Downloads/ubuntu-20.04.2.0-desktop-amd64.iso

Как только команда получит URL-адрес удаленного файла и место для его сохранения, нажмите клавишу Enter,  чтобы выполнить загрузку. Вскоре после этого вы увидите прогресс загрузки, а также скачивание вашего файла. Когда он будет завершен, откройте файловый менеджер Linux, чтобы получить доступ к вашему файлу.

Загрузка нескольких файлов из списка

Можно загрузить несколько файлов из списка в Curl, как и в Wget. Для этого начните с создания своего списка. Сначала с помощью  сенсорной  команды создайте пустой текстовый файл с именем «curl_downloads.txt».

touch ~/curl_downloads.txt

Затем откройте текстовый файл curl_downloads.txt (расположенный в вашей домашней папке) с помощью вашего любимого текстового редактора. После этого вставьте ссылки на каждый файл, который хотите скачать.

Например, чтобы загрузить ISO-образ Ubuntu, ISO-образ Fedora и ISO-образ Debian, мой список curl_downloads.txt должен содержать следующий код.

https://mirror.math.princeton.edu/pub/ubuntu-iso/20.04/ubuntu-20.04.2.0-desktop-amd64.iso
https://download.fedoraproject.org/pub/fedora/linux/releases/33/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-33-1.2.iso
https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.9.0-amd64-netinst.iso

Сохраните изменения в файле «curl_downloads.txt», используя функцию сохранения текстового редактора. Затем подайте его в команду Curl, чтобы загрузить все в списке

Обратите внимание, что мы используем  xargs  в сочетании с  curl,  чтобы можно было загружать несколько файлов

xargs -n 1 curl -O < ~/curl_downloads.txt

Нажмите клавишу Enter,  чтобы начать процесс загрузки. Пожалуйста, поймите, что при использовании команды для загрузки нескольких файлов указать место загрузки невозможно. Ваши загрузки появятся в домашнем каталоге (/home/USERNAME/).

Building Windows DLLs and C run-time (CRT) linkage issues

As a general rule, building a DLL with static CRT linkage is highly
discouraged, and intermixing CRTs in the same app is something to avoid at
any cost.

Reading and comprehending Microsoft Knowledge Base articles KB94248 and
KB140584 is a must for any Windows developer. Especially important is full
understanding if you are not going to follow the advice given above.

If your app is misbehaving in some strange way, or it is suffering from
memory corruption, before asking for further help, please try first to
rebuild every single library your app uses as well as your app using the
debug multithreaded dynamic C runtime.

If you get linkage errors read section 5.7 of the FAQ document.

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

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

Для того чтобы увидеть заголовок ответа в запрос curl, добавим ключ :

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

Чтобы в ответе получить только заголовок, используем ключ

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

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

При посещении веб-сайта мы отправляем запрос, используя метод GET. Существуют и другие методы HTTP, которые можно использовать при взаимодействии с REST API. Вот общие методы, используемые при работе с конечными точками REST:

HTTP метод Описание
POST Создание ресурса
GET Чтение (получение) ресурса
PUT Обновление ресурса
DELETE Удаление ресурса

Note: Метод GET используется по умолчанию в запросах curl. При использовании curl для выполнения запросов HTTP, отличных от GET, необходимо указывать нужный метод HTTP.

Авторизация с помощью cURL

HTTP Авторизация

Чтобы с помощью cURL авторизироваться на сайте, который использует Basic HTTP-аутентификацию нужно установить опцию CURLOPT_USERPWD, в которой будет наш логин и пароль.

Пример:

$login = 'test_login'; // наш логин
$password = 'test_password'; // наш пароль
$url = 'https://phpstack.ru/';

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_USERPWD, "$login:$password");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);

$result = curl_exec($ch);

curl_close($ch);

OAuth авторизация

$url = 'https://phpstack.ru/';
$oauthToken = 'Bearer dsfgdsfgdsfgdsfgdsfg'; // наш токен

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: $oauthToken"));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);

$html = curl_exec($ch);

curl_close($ch);

Авторизация через форму

Давайте применим полученные нами знания и авторизируемся на каком-нибудь сайте. Для этого нужно посмотреть куда форма отправляет данные и отправить туда то же самое.

Допустим на сайте есть такая форма:

<html>
<body>
 
<form method = "POST" action="https://phpstack.ru/admin/' >
  <input  name="login"  type="text"> 
  <input  name="password"  type="text">
  <input  type="submit"  name="submit"  value="Отправить" >
</form>
</body>
</html>

Тогда наш cURL запрос должен быть сформирован так:

$url = 'http://phpstack.ru/admin/'; // url, на который отправляется запрос

$postData = [ // поля нашего запроса
    'login' => 'our_login', // наш логин
    'password' => 'our_password', // наш пароль
];

$cookieFile = __DIR__ . '/cookie.txt';

// притворяемся браузером
$headers = [
    'Connection: keep-alive',
    'Upgrade-Insecure-Requests: 1',
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Accept-Encoding: gzip, deflate',
    'Accept-Language: ru,en-US;q=0.9,en;q=0.8',
];

$post_data = http_build_query($post_data);

$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookieFile);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookieFile);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true); // true 

$result = curl_exec($curl);

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

curl сканер

Security Task Manager показывает все запущенные сервисы Windows, включая внедренные скрытые приложения (например, мониторинг клавиатуры или браузера, авто вход). Уникальный рейтинг надежности указывает на вероятность того, что процесс потенциально может быть вредоносной программой-шпионом, кейлоггером или трояном.

Бесплатный aнтивирус находит и удаляет неактивные программы-шпионы, рекламу, трояны, кейлоггеры, вредоносные и следящие программы с вашего жесткого диска. Идеальное дополнение к Security Task Manager.

Reimage бесплатное сканирование, очистка, восстановление и оптимизация вашей системы.

Другие процессы

installer.exe ikeymain.exe aswregsvr.exe curl.exe rpmdaemon.exe 14bar.dll ccevtmgr.exe windscribe.exe msert.exe macro_hookkey.dll nierserver.exe

Building libcurl static library for DMD32 Windows

Please note that these instructions will compile libcurl static library without SSL support.

Building curl_static_dmc.lib

  1. Create directory C:\BUILD
  2. cd C:\BUILD\curl-7.37.0

Open include\curl\curlbuild.h in your favorite editor and add the following to line 188:

#elif defined(__DMC__)
#  define CURL_SIZEOF_LONG           4
#  define CURL_TYPEOF_CURL_OFF_T     long long
#  define CURL_FORMAT_CURL_OFF_T     "lld"
#  define CURL_FORMAT_CURL_OFF_TU    "llu"
#  define CURL_FORMAT_OFF_T          "%lld"
#  define CURL_SIZEOF_CURL_OFF_T     8
#  define CURL_SUFFIX_CURL_OFF_T     LL
#  define CURL_SUFFIX_CURL_OFF_TU    ULL
#  define CURL_TYPEOF_CURL_SOCKLEN_T int
#  define CURL_SIZEOF_CURL_SOCKLEN_T 4

Open include\curl\curlrules.h and add || defined(__DMC__) to line 207:

#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
  defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
  defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \
  defined(__ILEC400__) || defined(__DMC__)

Open lib\config-win32.h and add && !defined(__DMC__) to line 566

#if !defined(__SALFORDC__) && !defined(__BORLANDC__) && !defined(__DMC__)
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
#endif

Open lib\curl_setup.h and add the following to line 504

#if defined(__DMC__)
#  undef USE_THREADS_POSIX
#  undef USE_THREADS_WIN32
#endif

Save the following as C:\BUILD\curl-7.37.0\lib\Makefile.dmc

###########################################################################
#
## Makefile for building curl_static_dmc.lib with DMC - Digital Mars Compiler
## http://ftp.digitalmars.com/Digital_Mars_C++/Patch/dm857c.zip
##
## Please run me with mingw32-make!
##
## Usage:
## 1) Set environment vars: path\to\mingw32\bin;path\to\dm\bin
## Example:
## SET PATH=C:\Dev\MinGW\bin;C:\dm\bin
##
## 2) Build
## mingw32-make -f Makefile.dmc
##
#
###########################################################################

BIN=curl_static_dmc.lib

## REQUIRED
CFLAGS=-I. -I../include -DBUILDING_LIBCURL -D_WIN32_WINNT=0x0400 -DCURL_DISABLE_LDAP

## OPTIONAL. Please add # to the start of line if you want the feature
CFLAGS+=-DCURL_DISABLE_POP3
CFLAGS+=-DCURL_DISABLE_DICT
CFLAGS+=-DCURL_DISABLE_FILE
CFLAGS+=-DCURL_DISABLE_GOPHER
CFLAGS+=-DCURL_DISABLE_IMAP
CFLAGS+=-DCURL_DISABLE_RTSP
CFLAGS+=-DCURL_DISABLE_TELNET
CFLAGS+=-DCURL_DISABLE_TFTP

include Makefile.inc
SOURCES=$(LIB_CFILES) $(LIB_VTLS_CFILES)
OBJS=$(patsubst %.c,%.obj,$(SOURCES))

all $(BIN)

$(BIN) $(OBJS)
	lib -p32 -c $(BIN) $(OBJS)
	
%.obj %.c
	dmc $(CFLAGS) -c $< -o$@

clean 
	del $(BIN) $(OBJS)
  • cd C:\BUILD\curl-7.37.0\lib\
  • set PATH=C:\Dev\MinGW\bin;C:\dm\bin
  • mingw32-make -f Makefile.dmc

Using the static lib

Since dmd 2.069.0 all the curl symbols need to be exported so that std.net.curl can load them from the executable. This can be achieved by additionally linking with export_curl.def.

EXETYPE NT
EXPORTS
curl_global_init
curl_global_cleanup
curl_version_info
curl_easy_init
curl_easy_setopt
curl_easy_perform
curl_easy_duphandle
curl_easy_strerror
curl_easy_pause
curl_easy_cleanup
curl_slist_append
curl_slist_free_all

85 Operating Systems

AIX, AmigaOS, Android, Aros, BeOS, Blackberry 10, Blackberry Tablet OS, Cell
OS, ChromeOS, Cisco IOS, Cygwin, Dragonfly BSD, eCOS, FreeBSD, FreeDOS,
FreeRTOS, Fuchsia, Garmin OS, Genode, Haiku, HardenedBSD, HP-UX, Hurd,
Illumos, Integrity, iOS, ipadOS, IRIX, LineageOS, Linux, Lua RTOS, Mac OS 9,
macOS, Mbed, Micrium, MINIX, MorphOS, MPE/iX, MS-DOS, NCR MP-RAS, NetBSD,
Netware, Nintendo Switch, NonStop OS, NuttX, OpenBSD, OpenStep, Orbis OS,
OS/2, OS/400, OS21, Plan 9, PlayStation Portable, QNX, Qubes OS, ReactOS,
Redox, RICS OS, Sailfish OS, SCO Unix, Serenity, SINIX-Z, Solaris, SunOS,
Syllable OS, Symbian, Tizen, TPF, Tru64, tvOS, ucLinux, Ultrix, UNICOS,
UnixWare, VMS, vxWorks, WebOS, Wii system software, Windows, Windows CE, Xbox
System, z/OS, z/TPF, z/VM, z/VSE

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector