Spec-Zone.ru › D

std.net.curl

Функциональность сетевого клиента, предоставляемая библиотекой libcurl. Для использования этого модуля библиотека libcurl должна быть установлена на системе.

Категория Функции
Высокий уровень download upload get post put del options trace connect byLine byChunk byLineAsync byChunkAsync
Низкий уровень HTTP FTP SMTP
Примечание
Возможно, потребуется связаться с библиотекой curl, например, добавив "libs": ["curl"] в файл dub.json, если вы используете DUB.
Примечание для Windows x86: Статическую библиотеку libcurl, совместимую с DMD, можно загрузить со страницы архива загрузок dlang.org по адресу http://downloads.dlang.org/other/index.html. Этот модуль недоступен для iOS, tvOS или watchOS. По сравнению с непосредственным использованием libcurl, этот модуль позволяет упростить код клиента для распространённых случаев использования, не требует использования небезопасных операций и лучше интегрируется с остальной частью языка. Кроме того, он предоставляет доступ к протоколам, поддерживаемым libcurl, с помощью диапазонов как синхронно, так и асинхронно. Доступен API высокого и низкого уровня. API высокого уровня полностью построен на основе API низкого уровня. API высокого уровня предназначен для часто используемых функций, таких как HTTP/FTP get. byLineAsync и byChunkAsync обеспечивают асинхронный доступ к диапазонам, выполняющим запрос в другом потоке, обрабатывая строку/блок в текущем потоке. API низкого уровня позволяет использовать потоковую передачу и другие расширенные возможности.
Справочник
Название функции Описание
Высокий уровень
download download("ftp.digitalmars.com/sieve.ds", "/tmp/downloaded-ftp-file") загружает файл из URL в файловую систему.
upload upload("/tmp/downloaded-ftp-file", "ftp.digitalmars.com/sieve.ds"); загружает файл из файловой системы в URL.
get get("dlang.org") возвращает char[], содержащий веб-страницу dlang.org.
put put("dlang.org", "Hi") возвращает char[], содержащий веб-страницу dlang.org после HTTP PUT "hi".
post post("dlang.org", "Hi") возвращает char[], содержащий веб-страницу dlang.org после HTTP POST "hi".
byLine byLine("dlang.org") возвращает диапазон char[], содержащий веб-страницу dlang.org.
byChunk byChunk("dlang.org", 10) возвращает диапазон ubyte[10], содержащий веб-страницу dlang.org.
byLineAsync byLineAsync("dlang.org") возвращает диапазон char[], содержащий веб-страницу dlang.org асинхронно.
byChunkAsync byChunkAsync("dlang.org", 10) возвращает диапазон ubyte[10], содержащий веб-страницу dlang.org асинхронно.
Низкий уровень
HTTP HTTP структура для расширенного использования
FTP FTP структура для расширенного использования
SMTP SMTP структура для расширенного использования
Пример
import std.net.curl, std.stdio;

// Return a char[] containing the content specified by a URL
auto content = get("dlang.org");

// Post data and return a char[] containing the content specified by a URL
auto content = post("mydomain.com/here.cgi", ["name1" : "value1", "name2" : "value2"]);

// Get content of file from ftp server
auto content = get("ftp.digitalmars.com/sieve.ds");

// Post and print out content line by line. The request is done in another thread.
foreach (line; byLineAsync("dlang.org", "Post data"))
    writeln(line);

// Get using a line range and proxy settings
auto client = HTTP();
client.proxy = "1.2.3.4";
foreach (line; byLine("dlang.org", client))
    writeln(line);
Для большего контроля, чем предоставляют функции высокого уровня, используйте API низкого уровня:
Пример
import std.net.curl, std.stdio;

// GET with custom data receivers
auto http = HTTP("dlang.org");
http.onReceiveHeader =
    (in char[] key, in char[] value) { writeln(key, ": ", value); };
http.onReceive = (ubyte[] data) { /+ drop +/ return data.length; };
http.perform();
Сначала создаётся экземпляр структуры HTTP с подсчётом ссылок. Затем устанавливаются пользовательские делегаты. Они будут вызываться всякий раз, когда экземпляр HTTP получает заголовок и буфер данных, соответственно. В этом простом примере заголовки выводятся на стандартный вывод, а данные игнорируются. Если запрос нужно остановить до завершения, то из обратного вызова onReceive следует вернуть значение меньше, чем data.length. Для получения дополнительной информации смотрите onReceiveHeader/onReceive. Наконец, HTTP-запрос выполняется путём вызова perform(), который является синхронным.
Исходный код
std/net/curl.d
Лицензия:
Лицензия Boost 1.0.
Авторы:
Йонас Древсен. Часть кода SMTP предоставлена Джимми Као.
Благодарности
Функциональность основана на libcurl. Библиотека LibCurl лицензирована по лицензии MIT/X.
struct AutoProtocol;
Пример
import std.net.curl;
// Two requests below will do the same.
char[] content;

// Explicit connection provided
content = get!HTTP("dlang.org");

// Guess connection type by looking at the URL
content = get!AutoProtocol("ftp://foo.com/file");
// and since AutoProtocol is default this is the same as
content = get("ftp://foo.com/file");
// and will end up detecting FTP from the url and be the same as
content = get!FTP("ftp://foo.com/file");
void download(Conn = AutoProtocol)(const(char)[] url, string saveToPath, Conn conn = Conn())
Constraints: if (isCurlConn!Conn);

Загрузка HTTP/FTP в локальную файловую систему.

Параметры:
const(char)[] url ресурс для загрузки
string saveToPath путь для сохранения загруженного содержимого на локальном диске
Conn conn соединение для использования, например, FTP или HTTP. По умолчанию AutoProtocol определит тип соединения и создаст новый экземпляр только для этого вызова.
Пример
import std.net.curl;
download("https://httpbin.org/get", "/tmp/downloaded-http-file");
void upload(Conn = AutoProtocol)(string loadFromPath, const(char)[] url, Conn conn = Conn())
Constraints: if (isCurlConn!Conn);

Загрузка файла из локальной файловой системы с использованием протокола HTTP или FTP.

Параметры:
string loadFromPath путь для загрузки данных с локального диска.
const(char)[] url ресурс для загрузки
Conn conn соединение для использования, например, FTP или HTTP. По умолчанию AutoProtocol определит тип соединения и создаст новый экземпляр только для этого вызова.
Пример
import std.net.curl;
upload("/tmp/downloaded-ftp-file", "ftp.digitalmars.com/sieve.ds");
upload("/tmp/downloaded-http-file", "https://httpbin.org/post");
T[] get(Conn = AutoProtocol, T = char)(const(char)[] url, Conn conn = Conn())
Constraints: if (isCurlConn!Conn && (is(T == char) || is(T == ubyte)));

Получение содержимого HTTP/FTP.

Параметры:
const(char)[] url ресурс для получения
Conn conn соединение для использования, например, FTP или HTTP. По умолчанию AutoProtocol определит тип соединения и создаст новый экземпляр только для этого вызова. Параметр шаблона T указывает тип возвращаемого значения. Возможные значения — char и ubyte для возвращения char[] или ubyte[]. Если запрашивается char, содержимое будет преобразовано из кодировки символов соединения (указанной в заголовках HTTP-ответа или свойствах FTP-соединения, по умолчанию ISO-8859-1) в UTF-8.
Пример
import std.net.curl;
auto content = get("https://httpbin.org/get");
Возвращаемое значение:
Диапазон T[] содержащий содержимое ресурса, на который указывает URL.
Исключения:
CurlException при ошибке.
См. также:
HTTP.Method
T[] post(T = char, PostUnit)(const(char)[] url, const(PostUnit)[] postData, HTTP conn = HTTP())
Constraints: if (is(T == char) || is(T == ubyte));

T[] post(T = char)(const(char)[] url, string[string] postDict, HTTP conn = HTTP())
Constraints: if (is(T == char) || is(T == ubyte));

HTTP-запрос POST.

Параметры:
const(char)[] url ресурс для отправки POST-запроса
string[string] postDict данные для отправки в теле запроса. Принимается ассоциативный массив string, который будет закодирован с помощью www-form-urlencoding
const(PostUnit)[] postData данные для отправки в теле запроса. Принимается массив произвольного типа, который будет преобразован в ubyte[] перед отправкой.
HTTP conn используемое HTTP-соединение
T Параметр шаблона T указывает тип возвращаемого значения. Возможные значения — char и ubyte для возвращения char[] или ubyte[]. Если запрашивается char, содержимое будет преобразовано из кодировки символов соединения (указанной в заголовках HTTP-ответа или свойствах FTP-соединения, по умолчанию ISO-8859-1) в UTF-8.
Примеры:
import std.net.curl;

auto content1 = post("https://httpbin.org/post", ["name1" : "value1", "name2" : "value2"]);
auto content2 = post("https://httpbin.org/post", [1,2,3,4]);
Возвращаемое значение:
Диапазон T[] содержащий содержимое ресурса, на который указывает URL.
См. также:
HTTP.Method
T[] put(Conn = AutoProtocol, T = char, PutUnit)(const(char)[] url, const(PutUnit)[] putData, Conn conn = Conn())
Constraints: if (isCurlConn!Conn && (is(T == char) || is(T == ubyte)));

HTTP/FTP запрос PUT.

Параметры:
const(char)[] url ресурс для PUT
const(PutUnit)[] putData данные для отправки в теле запроса. Принимается массив произвольного типа, который будет преобразован в ubyte[] перед отправкой.
Conn conn соединение для использования, например, FTP или HTTP. По умолчанию AutoProtocol определит тип соединения и создаст новый экземпляр только для этого вызова. Параметр шаблона T указывает тип возвращаемого значения. Возможные значения — char и ubyte для возвращения char[] или ubyte[]. Если запрашивается char, содержимое будет преобразовано из кодировки символов соединения (указанной в заголовках HTTP-ответа или свойствах FTP-соединения, по умолчанию ISO-8859-1) в UTF-8.
Пример
import std.net.curl;
auto content = put("https://httpbin.org/put",
                     "Putting this data");
Возвращаемое значение:
Диапазон T[] содержащий содержимое ресурса, на который указывает URL.
См. также:
HTTP.Method
void del(Conn = AutoProtocol)(const(char)[] url, Conn conn = Conn())
Constraints: if (isCurlConn!Conn);

HTTP/FTP удаление содержимого.

Параметры:
const(char)[] url ресурс для удаления
Conn conn соединение для использования, например, FTP или HTTP. По умолчанию AutoProtocol определит тип соединения и создаст новый экземпляр только для этого вызова.
Пример
import std.net.curl;
del("https://httpbin.org/delete");
См. также:
HTTP.Method
T[] options(T = char)(const(char)[] url, HTTP conn = HTTP())
Constraints: if (is(T == char) || is(T == ubyte));

HTTP запрос OPTIONS.

Параметры:
const(char)[] url ресурс, к которому нужно обратиться с OPTIONS запросом
HTTP conn соединение для использования, например, FTP или HTTP. По умолчанию AutoProtocol определит тип соединения и создаст новый экземпляр только для этого вызова. Параметр шаблона T указывает тип возвращаемого значения. Возможные значения — char и ubyte для возвращения char[] или ubyte[].
Пример
import std.net.curl;
auto http = HTTP();
options("https://httpbin.org/headers", http);
writeln("Allow set to " ~ http.responseHeaders["Allow"]);
Возвращаемое значение:
Диапазон T[] содержащий параметры ресурса, на который указывает URL.
См. также:
HTTP.Method
T[] trace(T = char)(const(char)[] url, HTTP conn = HTTP())
Constraints: if (is(T == char) || is(T == ubyte));

HTTP запрос TRACE.

Параметры:
const(char)[] url ресурс, к которому нужно обратиться с TRACE запросом
HTTP conn соединение для использования, например, FTP или HTTP. По умолчанию AutoProtocol определит тип соединения и создаст новый экземпляр только для этого вызова. Параметр шаблона T указывает тип возвращаемого значения. Возможные значения — char и ubyte для возвращения char[] или ubyte[].
Пример
import std.net.curl;
trace("https://httpbin.org/headers");
Возвращаемое значение:
Диапазон T[] содержащий информацию о трассировке ресурса, на который указывает URL.
См. также:
HTTP.Method
T[] connect(T = char)(const(char)[] url, HTTP conn = HTTP())
Constraints: if (is(T == char) || is(T == ubyte));

HTTP запрос CONNECT.

Параметры:
const(char)[] url ресурс, к которому нужно обратиться с CONNECT запросом
HTTP conn используемое HTTP-соединение. Параметр шаблона T указывает тип возвращаемого значения. Возможные значения — char и ubyte для возвращения char[] или ubyte[].
Пример
import std.net.curl;
connect("https://httpbin.org/headers");
Возвращаемое значение:
Диапазон T[] содержащий информацию о подключении к ресурсу, на который указывает URL.
См. также:
HTTP.Method
T[] patch(T = char, PatchUnit)(const(char)[] url, const(PatchUnit)[] patchData, HTTP conn = HTTP())
Constraints: if (is(T == char) || is(T == ubyte));

HTTP запрос PATCH.

Параметры:
const(char)[] url ресурс для PATCH
const(PatchUnit)[] patchData данные для отправки в теле запроса. Принимается массив произвольного типа, который будет преобразован в ubyte[] перед отправкой.
HTTP conn используемое HTTP-соединение. Параметр шаблона T указывает тип возвращаемого значения. Возможные значения — char и ubyte для возвращения char[] или ubyte[].
Пример
auto http = HTTP();
http.addRequestHeader("Content-Type", "application/json");
auto content = patch("https://httpbin.org/patch", `{"title": "Patched Title"}`, http);
Возвращаемое значение:
Диапазон T[] содержащий содержимое ресурса, на который указывает URL.
См. также:
HTTP.Method
auto byLine(Conn = AutoProtocol, Terminator = char, Char = char)(const(char)[] url, KeepTerminator keepTerminator = No.keepTerminator, Terminator terminator = '\x0a', Conn conn = Conn())
Constraints: if (isCurlConn!Conn && isSomeChar!Char && isSomeChar!Terminator);

Получение содержимого HTTP/FTP в виде диапазона строк.

Диапазон строк возвращается по завершении запроса. Если необходимо настроить метод или другие свойства запроса, установите параметр conn со значением экземпляра HTTP/FTP, у которого заданы эти свойства.

Пример
import std.net.curl, std.stdio;
foreach (line; byLine("dlang.org"))
    writeln(line);
Параметры:
const(char)[] url URL для получения содержимого
KeepTerminator keepTerminator Yes.keepTerminator указывает, что символ окончания строки должен возвращаться как часть строк в диапазоне.
Terminator terminator Символ, завершающий строку
Conn conn Подключение, например, HTTP или FTP.
Возвращаемое значение:
Диапазон Char[] с содержимым ресурса, на который указывает URL
auto byChunk(Conn = AutoProtocol)(const(char)[] url, size_t chunkSize = 1024, Conn conn = Conn())
Constraints: if (isCurlConn!Conn);

Получение содержимого HTTP/FTP в виде диапазона блоков.

Диапазон блоков возвращается по завершении запроса. Если необходимо настроить метод или другие свойства запроса, установите параметр conn со значением экземпляра HTTP/FTP, у которого заданы эти свойства.

Пример
import std.net.curl, std.stdio;
foreach (chunk; byChunk("dlang.org", 100))
    writeln(chunk); // chunk is ubyte[100]
Параметры:
const(char)[] url URL для получения содержимого
size_t chunkSize Размер каждого блока
Conn conn Подключение, например, HTTP или FTP.
Возвращаемое значение:
Диапазон ubyte[chunkSize] с содержимым ресурса, на который указывает URL
auto byLineAsync(Conn = AutoProtocol, Terminator = char, Char = char, PostUnit)(const(char)[] url, const(PostUnit)[] postData, KeepTerminator keepTerminator = No.keepTerminator, Terminator terminator = '\x0a', size_t transmitBuffers = 10, Conn conn = Conn())
Constraints: if (isCurlConn!Conn && isSomeChar!Char && isSomeChar!Terminator);

auto byLineAsync(Conn = AutoProtocol, Terminator = char, Char = char)(const(char)[] url, KeepTerminator keepTerminator = No.keepTerminator, Terminator terminator = '\x0a', size_t transmitBuffers = 10, Conn conn = Conn());

Асинхронное получение содержимого HTTP/FTP в виде диапазона строк.

Диапазон строк возвращается немедленно, а запрос на получение строк выполняется в другом потоке. Если необходимо настроить метод или другие свойства запроса, установите параметр conn со значением экземпляра HTTP/FTP, у которого заданы эти свойства.

Если postData не равно null, метод будет установлен на post для HTTP-запросов.

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

Если данные недоступны, и основной поток обращается к диапазону, он будет блокироваться до тех пор, пока данные не станут доступны. Исключением из этого является метод wait(Duration) в LineInputRange. Этот метод будет ждать не более указанного времени и вернёт true, если данные доступны.

Пример
import std.net.curl, std.stdio;
// Get some pages in the background
auto range1 = byLineAsync("www.google.com");
auto range2 = byLineAsync("www.wikipedia.org");
foreach (line; byLineAsync("dlang.org"))
    writeln(line);

// Lines already fetched in the background and ready
foreach (line; range1) writeln(line);
foreach (line; range2) writeln(line);
import std.net.curl, std.stdio;
// Get a line in a background thread and wait in
// main thread for 2 seconds for it to arrive.
auto range3 = byLineAsync("dlang.com");
if (range3.wait(dur!"seconds"(2)))
    writeln(range3.front);
else
    writeln("No line received after 2 seconds!");
Параметры:
const(char)[] url URL для получения содержимого
const(PostUnit)[] postData Данные для HTTP Post
KeepTerminator keepTerminator Yes.keepTerminator указывает, что символ окончания строки должен возвращаться как часть строк в диапазоне.
Terminator terminator Символ, завершающий строку
size_t transmitBuffers Количество строк, буферизуемых асинхронно
Conn conn Подключение, например, HTTP или FTP.
Возвращаемое значение:
Диапазон Char[] с содержимым ресурса, на который указывает URL.
auto byChunkAsync(Conn = AutoProtocol, PostUnit)(const(char)[] url, const(PostUnit)[] postData, size_t chunkSize = 1024, size_t transmitBuffers = 10, Conn conn = Conn())
Constraints: if (isCurlConn!Conn);

auto byChunkAsync(Conn = AutoProtocol)(const(char)[] url, size_t chunkSize = 1024, size_t transmitBuffers = 10, Conn conn = Conn())
Constraints: if (isCurlConn!Conn);

Асинхронное получение содержимого HTTP/FTP в виде диапазона блоков.

Диапазон блоков возвращается немедленно, а запрос на получение блоков выполняется в другом потоке. Если необходимо настроить метод или другие свойства запроса, установите параметр conn со значением экземпляра HTTP/FTP, у которого заданы эти свойства.

Если postData не равно null, метод будет установлен на post для HTTP-запросов.

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

Если данные недоступны, и основной поток обращается к диапазону, он будет блокироваться до тех пор, пока данные не станут доступны. Исключением из этого является метод wait(Duration) в ChunkInputRange. Этот метод будет ждать не более указанного времени и вернёт true, если данные доступны.

Пример
import std.net.curl, std.stdio;
// Get some pages in the background
auto range1 = byChunkAsync("www.google.com", 100);
auto range2 = byChunkAsync("www.wikipedia.org");
foreach (chunk; byChunkAsync("dlang.org"))
    writeln(chunk); // chunk is ubyte[100]

// Chunks already fetched in the background and ready
foreach (chunk; range1) writeln(chunk);
foreach (chunk; range2) writeln(chunk);
import std.net.curl, std.stdio;
// Get a line in a background thread and wait in
// main thread for 2 seconds for it to arrive.
auto range3 = byChunkAsync("dlang.com", 10);
if (range3.wait(dur!"seconds"(2)))
    writeln(range3.front);
else
    writeln("No chunk received after 2 seconds!");
Параметры:
const(char)[] url URL для получения содержимого
const(PostUnit)[] postData Данные для HTTP Post
size_t chunkSize Размер блоков
size_t transmitBuffers Количество блоков, буферизуемых асинхронно
Conn conn Подключение, например, HTTP или FTP.
Возвращаемое значение:
Диапазон ubyte[chunkSize] с содержимым ресурса, на который указывает URL.
struct HTTP;

Функциональность HTTP-клиента.

Пример
Получение с пользовательскими приемниками данных:
import std.net.curl, std.stdio;

auto http = HTTP("https://dlang.org");
http.onReceiveHeader =
    (in char[] key, in char[] value) { writeln(key ~ ": " ~ value); };
http.onReceive = (ubyte[] data) { /+ drop +/ return data.length; };
http.perform();
Отправка с передатчиками данных:
import std.net.curl, std.stdio;

auto http = HTTP("https://dlang.org");
auto msg = "Hello world";
http.contentLength = msg.length;
http.onSend = (void[] data)
{
    auto m = cast(void[]) msg;
    size_t len = m.length > data.length ? data.length : m.length;
    if (len == 0) return len;
    data[0 .. len] = m[0 .. len];
    msg = msg[len..$];
    return len;
};
http.perform();
Отслеживание прогресса:
import std.net.curl, std.stdio;

auto http = HTTP();
http.method = HTTP.Method.get;
http.url = "http://upload.wikimedia.org/wikipedia/commons/" ~
           "5/53/Wikipedia-logo-en-big.png";
http.onReceive = (ubyte[] data) { return data.length; };
http.onProgress = (size_t dltotal, size_t dlnow,
                   size_t ultotal, size_t ulnow)
{
    writeln("Progress ", dltotal, ", ", dlnow, ", ", ultotal, ", ", ulnow);
    return 0;
};
http.perform();
См. также:
RFC2616
alias AuthMethod = etc.c.curl.CurlAuth;

Метод аутентификации, эквивалентный etc.c.curl.CurlAuth

alias TimeCond = etc.c.curl.CurlTimeCond;

Перечисление условий времени, как псевдоним etc.c.curl.CurlTimeCond

RFC2616 Раздел 14.25

static HTTP opCall(const(char)[] url);

Конструктор, принимающий URL в качестве параметра.

static HTTP opCall();
HTTP dup();
CurlCode perform(ThrowOnError throwOnError = Yes.throwOnError);

Выполнение запроса HTTP.

После настройки HTTP-клиента и, возможно, назначения обратных вызовов, метод perform() начнёт выполнение запроса к указанному серверу.

Параметры:
ThrowOnError throwOnError выбрасывать исключение или возвращать CurlCode при ошибке
@property void url(const(char)[] url);

URL для указания расположения ресурса.

@property void caInfo(const(char)[] caFile);

Установить файл сертификатов CA для проверки подлинности SSL-соединения.

alias requestPause = etc.c.curl.CurlReadFunc.pause;

Значение, возвращаемое делегатами onSend/onReceive для приостановки запроса.

alias requestAbort = etc.c.curl.CurlReadFunc.abort;

Значение, возвращаемое делегатом onSend для прерывания запроса.

@property bool isStopped();

Истина, если экземпляр остановлен. Остановленный экземпляр непригоден для использования.

void shutdown();

Остановка и аннулирование этого экземпляра.

@property void verbose(bool on);

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

@property void dataTimeout(Duration d);

Установить таймаут активности соединения.

@property void operationTimeout(Duration d);

Установить максимальное время, которое операция может занимать. Это включает разрешение DNS, подключение, передачу данных и т.д.

@property void connectTimeout(Duration d);

Установить таймаут подключения.

@property void proxy(const(char)[] host);

Прокси

См.
прокси
@property void proxyPort(ushort port);

Порт прокси

См.
proxy_port
alias CurlProxy = etc.c.curl.CurlProxy;

Тип прокси

@property void proxyType(CurlProxy type);

Тип прокси

См.
proxy_type
@property void dnsTimeout(Duration d);

Таймаут поиска DNS.

@property void netInterface(const(char)[] i);

@property void netInterface(const(ubyte)[4] i);

@property void netInterface(InternetAddress i);

Используемый сетевой интерфейс в виде IP-адреса интерфейса.

Пример
theprotocol.netInterface = "192.168.1.32";
theprotocol.netInterface = [ 192, 168, 1, 32 ];
См.
std.socket.InternetAddress
@property void localPort(ushort port);

Установить используемый локальный исходящий порт.

Параметры:
ushort port первый исходящий номер порта для попытки использования
@property void localPortRange(ushort range);

Установить диапазон локальных исходящих портов. Может использоваться совместно с свойством localPort.

Параметры:
ushort range если первый порт занят, то попробовать столько же номеров портов вперёд
@property void tcpNoDelay(bool on);

Включить или выключить опцию tcp no-delay для сокета.

См.
nodelay
void setAuthentication(const(char)[] username, const(char)[] password, const(char)[] domain = "");

Установить имя пользователя, пароль и (необязательно) домен для аутентификации.

Некоторые протоколы могут потребовать аутентификации в некоторых случаях. Используйте эту функцию для предоставления учетных данных.

Параметры:
const(char)[] username имя пользователя
const(char)[] password пароль
const(char)[] domain используется только для аутентификации NTLM и устанавливается в имя домена NTLM
void setProxyAuthentication(const(char)[] username, const(char)[] password);

Установить имя пользователя и пароль для аутентификации прокси.

Параметры:
const(char)[] username имя пользователя
const(char)[] password пароль
@property void onSend(size_t delegate(void[]) callback);

Обработчик событий, вызываемый при необходимости отправки данных. Длина void[] задаёт максимальное количество байтов, которое может быть отправлено.

Возвращаемое значение:
Обратный вызов возвращает количество элементов в буфере, которые заполнены и готовы к отправке. Специальное значение .abortRequest может быть возвращено для прерывания текущего запроса. Специальное значение .pauseRequest может быть возвращено для приостановки текущего запроса.
Пример
import std.net.curl;
string msg = "Hello world";
auto client = HTTP("dlang.org");
client.onSend = delegate size_t(void[] data)
{
    auto m = cast(void[]) msg;
    size_t length = m.length > data.length ? data.length : m.length;
    if (length == 0) return 0;
    data[0 .. length] = m[0 .. length];
    msg = msg[length..$];
    return length;
};
client.perform();
@property void onReceive(size_t delegate(ubyte[]) callback);

Обработчик событий для получения входящих данных. Убедитесь, что вы копируете входящие ubyte[], так как они могут стать недоступными после возвращения из обратного вызова.

Возвращаемое значение:
Обратный вызов возвращает количество прочитанных байтов. Если не весь массив является запросом, запрос будет прерван. Специальное значение .pauseRequest может быть возвращено для приостановки текущего запроса.
Пример
import std.net.curl, std.stdio;
auto client = HTTP("dlang.org");
client.onReceive = (ubyte[] data)
{
    writeln("Got data", to!(const(char)[])(data));
    return data.length;
};
client.perform();
@property void onProgress(int delegate(size_t dlTotal, size_t dlNow, size_t ulTotal, size_t ulNow) callback);

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

Параметры обратного вызова
dlTotal общее количество байтов для загрузки
dlNow текущее количество загруженных байтов
ulTotal общее количество байтов для загрузки
ulNow текущее количество загруженных байтов
Тип соединения, используемый, когда URL должен использоваться для автоматического определения протокола. Этот структура используется как заполнитель для параметра соединения при вызове API высокого уровня, и тип соединения (HTTP/FTP) должен определяться по URL-параметру. Правила определения протокола: 1, если URL начинается с ftp://, ftps:// или ftp., то предполагается соединение FTP. 2, HTTP соединение в противном случае.
Возвращаемое значение обратного вызова
Возврат 0 сигнализирует об успехе, ненулевое значение — о прерывании передачи.
Пример
import std.net.curl, std.stdio;
auto client = HTTP("dlang.org");
client.onProgress = delegate int(size_t dl, size_t dln, size_t ul, size_t uln)
{
    writeln("Progress: downloaded ", dln, " of ", dl);
    writeln("Progress: uploaded ", uln, " of ", ul);
    return 0;
};
client.perform();
void clearRequestHeaders();

Очистить все исходящие заголовки.

void addRequestHeader(const(char)[] name, const(char)[] value);

Добавить заголовок, например, "X-CustomField: Что-то подозрительное".

Функциональности удаления заголовков нет. Вместо этого выполните clearRequestHeaders и установите необходимые заголовки.

Пример
import std.net.curl;
auto client = HTTP();
client.addRequestHeader("X-Custom-ABC", "This is the custom value");
auto content = get("dlang.org", client);
static @property string defaultUserAgent();

Значение по умолчанию "User-Agent", отправляемое с запросом. Оно имеет вид "Phobos-std.net.curl/PHOBOS_VERSION (libcurl/CURL_VERSION)"

void setUserAgent(const(char)[] userAgent);

Установить значение заголовка запроса user agent.

По умолчанию заголовок "User-Agent" устанавливается в defaultUserAgent, даже если setUserAgent не вызывался. Передайте пустую строку, чтобы вообще подавить заголовок "User-Agent".

CurlCode getTiming(CurlInfo timing, ref double val);

Получение различных временных параметров, определенных в etc.c.curl.CurlInfo. Значение можно использовать только если возвращаемое значение равно etc.c.curl.CurlError.ok.

Параметры:
CurlInfo timing один из временных параметров, определенных в etc.c.curl.CurlInfo. Значения: etc.c.curl.CurlInfo.namelookup_time, etc.c.curl.CurlInfo.connect_time, etc.c.curl.CurlInfo.pretransfer_time, etc.c.curl.CurlInfo.starttransfer_time, etc.c.curl.CurlInfo.redirect_time, etc.c.curl.CurlInfo.appconnect_time, etc.c.curl.CurlInfo.total_time.
double val фактическое значение запрошенного временного параметра.
Возвращаемое значение:
Код возврата операции. Сохраненное в val значение должно использоваться только если возвращаемое значение равно etc.c.curl.CurlInfo.ok.
Пример
import std.net.curl;
import etc.c.curl : CurlError, CurlInfo;

auto client = HTTP("dlang.org");
client.perform();

double val;
CurlCode code;

code = client.getTiming(CurlInfo.namelookup_time, val);
assert(code == CurlError.ok);
@property string[string] responseHeaders();

Заголовки, считанные из успешного ответа.

@property void method(Method m);

@property Method method();

Используемый HTTP-метод.

@property StatusLine statusLine();

HTTP строка состояния последнего ответа. Один вызов может привести к нескольким запросам из-за перенаправления.

void setCookie(const(char)[] cookie);

Устанавливает активную строку cookie, например, "name1=value1;name2=value2"

void setCookieJar(const(char)[] path);

Устанавливает путь к файлу, где должен быть прочитан/сохранен cookie-jar.

void flushCookieJar();

Очистить cookie-jar в дисковую память.

void clearSessionCookies();

Очистить сессионные cookie.

void clearAllCookies();

Очистить все cookie.

void setTimeCondition(HTTP.TimeCond cond, SysTime timestamp);

Установить условие по времени для запроса.

Параметры:
HTTP.TimeCond cond CurlTimeCond.{none,ifmodsince,ifunmodsince,lastmod}
SysTime timestamp Отметка времени для условия Раздел 14.25 RFC2616
@property void postData(const(void)[] data);

Указание данных для отправки, если не используется обратный вызов onSend.

Данные НЕ копируются библиотекой. Content-Type по умолчанию будет application/octet-stream. Данные не преобразуются или кодируются этим методом.

Пример
import std.net.curl, std.stdio;
auto http = HTTP("http://www.mydomain.com");
http.onReceive = (ubyte[] data) { writeln(to!(const(char)[])(data)); return data.length; };
http.postData = [1,2,3,4,5];
http.perform();
@property void postData(const(char)[] data);

Указание данных для отправки, если не используется обратный вызов onSend.

Данные НЕ копируются библиотекой. Content-Type по умолчанию будет text/plain. Данные не преобразуются или кодируются этим методом.

Пример
import std.net.curl, std.stdio;
auto http = HTTP("http://www.mydomain.com");
http.onReceive = (ubyte[] data) { writeln(to!(const(char)[])(data)); return data.length; };
http.postData = "The quick....";
http.perform();
void setPostData(const(void)[] data, string contentType);

Указание данных для отправки при использовании обратного вызова onSend, с указанием Content-Type.

Параметры:
const(void)[] data Данные для отправки.
string contentType MIME-тип данных, например, "text/plain" или "application/octet-stream". См. также: Интернет-тип носителя в Википедии.
import std.net.curl;
auto http = HTTP("http://onlineform.example.com");
auto data = "app=login&username=bob&password=s00perS3kret";
http.setPostData(data, "application/x-www-form-urlencoded");
http.onReceive = (ubyte[] data) { return data.length; };
http.perform();
@property void onReceiveHeader(void delegate(in char[] key, in char[] value) callback);

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

Обратный вызов получит ключ и значение заголовка в качестве параметра. Массивы const(char)[] не будут действительны после возврата делегата.

Пример
import std.net.curl, std.stdio;
auto http = HTTP("dlang.org");
http.onReceive = (ubyte[] data) { writeln(to!(const(char)[])(data)); return data.length; };
http.onReceiveHeader = (in char[] key, in char[] value) { writeln(key, " = ", value); };
http.perform();
@property void onReceiveStatusLine(void delegate(StatusLine) callback);

Обратный вызов для каждого полученного StatusLine.

Обратите внимание, что могут быть несколько обратных вызовов для каждого вызова perform() из-за перенаправлений.

См. также:
StatusLine
@property void contentLength(ulong len);

Длина содержимого в байтах при использовании запросов с содержимым (например, POST/PUT) и без использования фрагментированной передачи. Устанавливается как заголовок "Content-Length". Установка значения ulong.max сбрасывает передачу на фрагментированную.

@property void authenticationMethod(AuthMethod authMethod);

Метод аутентификации, как указано в AuthMethod.

@property void maxRedirects(uint maxRedirs);

Устанавливает максимальное разрешенное перенаправление с использованием заголовка location. uint.max для бесконечного значения.

enum Method: int;

Стандартные HTTP-методы: Раздел 5.1.1 RFC2616

head
get
post
put
del
options
trace
connect
patch
struct StatusLine;

HTTP строка состояния, т.е. первая строка, возвращаемая в HTTP-ответе.

Если выполняется аутентификация или перенаправление, то состояние будет для последнего полученного ответа.

ushort majorVersion;

Основная версия HTTP, например, 1 в HTTP/1.0.

ushort minorVersion;

Дополнительная версия HTTP, например, 0 в HTTP/1.0.

ushort code;

Код строки состояния HTTP, например, 200.

string reason;

Строка причины HTTP строки состояния.

@safe void reset();

Сбросить эту строку состояния

const string toString();
struct FTP;

Функциональность клиента FTP.

См. также:
RFC959
static FTP opCall(const(char)[] url);

Доступ к FTP по указанному адресу URL.

static FTP opCall();
FTP dup();
CurlCode perform(ThrowOnError throwOnError = Yes.throwOnError);

Выполняет запрос FTP, как он был сконфигурирован.

После настройки клиента FTP и, возможно, назначения обратных вызовов, метод perform() начнет фактическое взаимодействие с сервером.

Параметры:
ThrowOnError throwOnError нужно ли выбрасывать исключение или возвращать CurlCode при ошибке
@property void url(const(char)[] url);

URL для указания местоположения ресурса.

alias requestPause = etc.c.curl.CurlReadFunc.pause;

Значение, возвращаемое из делегатов onSend/onReceive для приостановки запроса

alias requestAbort = etc.c.curl.CurlReadFunc.abort;

Значение, возвращаемое из делегата onSend для прерывания запроса

@property bool isStopped();

Истина, если экземпляр остановлен. Остановленный экземпляр неприменим.

void shutdown();

Останавливает и делает недействительным этот экземпляр.

@property void verbose(bool on);

Установить подробный режим. Это выведет информацию о запросе в stderr.

@property void dataTimeout(Duration d);

Установить таймаут для активности по соединению.

@property void operationTimeout(Duration d);

Установить максимальное время, которое разрешено для выполнения операции. Включает в себя разрешение DNS, подключение, передачу данных и т. д.

@property void connectTimeout(Duration d);

Установить таймаут для подключения.

@property void proxy(const(char)[] host);

Прокси

См.
прокси
@property void proxyPort(ushort port);

Порт прокси

См.
proxy_port
alias CurlProxy = etc.c.curl.CurlProxy;

Тип прокси

@property void proxyType(CurlProxy type);

Тип прокси

См.
proxy_type
@property void dnsTimeout(Duration d);

Таймаут поиска DNS.

@property void netInterface(const(char)[] i);

@property void netInterface(const(ubyte)[4] i);

@property void netInterface(InternetAddress i);

Сетевой интерфейс для использования в форме IP-адреса интерфейса.

Пример
theprotocol.netInterface = "192.168.1.32";
theprotocol.netInterface = [ 192, 168, 1, 32 ];
См.
std.socket.InternetAddress
@property void localPort(ushort port);

Установить локальный исходящий порт для использования.

Параметры:
ushort port номер первого исходящего порта для попытки использования
@property void localPortRange(ushort range);

Установить локальный диапазон исходящих портов для использования. Это можно использовать совместно с свойством localPort.

Параметры:
ushort range если первый порт занят, то попробуйте столько же портов вперед
@property void tcpNoDelay(bool on);

Включить или выключить опцию socket tcp no-delay.

См.
nodelay
void setAuthentication(const(char)[] username, const(char)[] password, const(char)[] domain = "");

Устанавливает имя пользователя, пароль и необязательно домен для целей аутентификации.

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

Параметры:
const(char)[] username имя пользователя
const(char)[] password пароль
const(char)[] domain используется только для аутентификации NTLM и задается именем домена NTLM
void setProxyAuthentication(const(char)[] username, const(char)[] password);

Устанавливает имя пользователя и пароль для аутентификации прокси.

Параметры:
const(char)[] username имя пользователя
const(char)[] password пароль
@property void onSend(size_t delegate(void[]) callback);

Обработчик событий, вызываемый при необходимости данных для отправки. Длина буфера void[] определяет максимальное количество байтов, которое можно отправить.

Возвращаемое значение:
Обратный вызов возвращает количество элементов в буфере, которые были заполнены и готовы к отправке. Специальное значение .abortRequest может быть возвращено для прерывания текущего запроса. Специальное значение .pauseRequest может быть возвращено для приостановки текущего запроса.
@property void onReceive(size_t delegate(ubyte[]) callback);

Обработчик событий, принимающий входящие данные. Убедитесь, что скопировали полученные ubyte[], так как они не гарантируют корректность после возвращения обратного вызова.

Возвращаемое значение:
Обратный вызов возвращает количество прочитанных байтов. Если не весь массив - запрос прервётся. Специальное значение .pauseRequest может быть возвращено для приостановки текущего запроса.
@property void onProgress(int delegate(size_t dlTotal, size_t dlNow, size_t ulTotal, size_t ulNow) callback);

Обработчик событий, вызываемый для информирования о ходе загрузки/скачивания.

Параметры обратного вызова
dlTotal общее количество байтов для загрузки
dlNow в настоящее время загруженные байты
ulTotal общее количество байтов для загрузки
ulNow в настоящее время загруженные байты
Тип соединения, используемый, когда URL должен быть использован для автоматического определения протокола. Эта структура используется в качестве заглушки для параметра соединения при вызове API высокого уровня, а тип соединения (HTTP/FTP) должен определяться по параметру URL. Правила определения протокола: 1. Если URL начинается с ftp://, ftps:// или ftp., то предполагается FTP-соединение. 2. В противном случае предполагается HTTP-соединение.
Возвращаемое значение обратного вызова
Возврат 0 из обратного вызова указывает на успех, возврат ненулевого значения прерывает передачу.
void clearCommands();

Очистить все команды, отправленные FTP-серверу.

void addCommand(const(char)[] command);

Добавить команду для отправки FTP-серверу.

Функциональности удаления команды нет. Выполните clearCommands и задайте необходимые команды вместо этого.

Пример
import std.net.curl;
auto client = FTP();
client.addCommand("RNFR my_file.txt");
client.addCommand("RNTO my_renamed_file.txt");
upload("my_file.txt", "ftp.digitalmars.com", client);
@property void encoding(string name);

@property string encoding();

Кодировка соединения. По умолчанию ISO-8859-1.

@property void contentLength(ulong len);

Длина содержимого в байтах данных FTP.

CurlCode getTiming(CurlInfo timing, ref double val);

Получить различные тайминги, определенные в etc.c.curl.CurlInfo. Значение используется только если возвращаемое значение равно etc.c.curl.CurlError.ok.

Параметры:
CurlInfo timing один из таймингов, определенных в etc.c.curl.CurlInfo. Значения: etc.c.curl.CurlInfo.namelookup_time, etc.c.curl.CurlInfo.connect_time, etc.c.curl.CurlInfo.pretransfer_time, etc.c.curl.CurlInfo.starttransfer_time, etc.c.curl.CurlInfo.redirect_time, etc.c.curl.CurlInfo.appconnect_time, etc.c.curl.CurlInfo.total_time.
double val фактическое значение запрашиваемого тайминга.
Возвращаемое значение:
Код возврата операции. Сохраненное в val значение должно использоваться только если возвращаемое значение равно etc.c.curl.CurlInfo.ok.
Пример
import std.net.curl;
import etc.c.curl : CurlError, CurlInfo;

auto client = FTP();
client.addCommand("RNFR my_file.txt");
client.addCommand("RNTO my_renamed_file.txt");
upload("my_file.txt", "ftp.digitalmars.com", client);

double val;
CurlCode code;

code = client.getTiming(CurlInfo.namelookup_time, val);
assert(code == CurlError.ok);
struct SMTP;

Базовая поддержка протокола SMTP.

Пример
import std.net.curl;

// Send an email with SMTPS
auto smtp = SMTP("smtps://smtp.gmail.com");
smtp.setAuthentication("from.addr@gmail.com", "password");
smtp.mailTo = ["<to.addr@gmail.com>"];
smtp.mailFrom = "<from.addr@gmail.com>";
smtp.message = "Example Message";
smtp.perform();
См. также:
RFC2821
static SMTP opCall(const(char)[] url);

Устанавливает URL SMTP-сервера.

static SMTP opCall();
CurlCode perform(ThrowOnError throwOnError = Yes.throwOnError);

Выполняет запрос в соответствии с настройками.

Параметры:
ThrowOnError throwOnError выбрасывать исключение или возвращать CurlCode при ошибке
@property void url(const(char)[] url);

URL для указания расположения ресурса.

alias requestPause = etc.c.curl.CurlReadFunc.pause;

Значение, возвращаемое делегатами onSend/onReceive для приостановки запроса

alias requestAbort = etc.c.curl.CurlReadFunc.abort;

Значение, возвращаемое делегатом onSend для прерывания запроса

@property bool isStopped();

Истина, если экземпляр остановлен. Остановленный экземпляр не используется.

void shutdown();

Останавливает и делает недействительным этот экземпляр.

@property void verbose(bool on);

Включить подробный режим. Это выведет информацию о запросе в stderr.

@property void dataTimeout(Duration d);

Установить таймаут для активности по соединению.

@property void operationTimeout(Duration d);

Установить максимальное время, которое операция может занять. Это включает разрешение DNS, подключение, передачу данных и т. д.

@property void connectTimeout(Duration d);

Установить таймаут для подключения.

@property void proxy(const(char)[] host);

Прокси

См.
прокси
@property void proxyPort(ushort port);

Порт прокси

См.
proxy_port
alias CurlProxy = etc.c.curl.CurlProxy;

Тип прокси

@property void proxyType(CurlProxy type);

Тип прокси

См.
proxy_type
@property void dnsTimeout(Duration d);

Таймаут поиска DNS.

@property void netInterface(const(char)[] i);

@property void netInterface(const(ubyte)[4] i);

@property void netInterface(InternetAddress i);

Используемый сетевой интерфейс в виде IP-адреса интерфейса.

Пример
theprotocol.netInterface = "192.168.1.32";
theprotocol.netInterface = [ 192, 168, 1, 32 ];
См.
std.socket.InternetAddress
@property void localPort(ushort port);

Установить локальный исходящий порт.

Параметры:
ushort port номер первого исходящего порта для использования
@property void localPortRange(ushort range);

Установить диапазон локальных исходящих портов для использования. Это можно использовать совместно со свойством localPort.

Параметры:
ushort range если первый порт занят, то попробовать столько портов вперед
@property void tcpNoDelay(bool on);

Включить или выключить опцию tcp no-delay сокета.

См.
nodelay
void setAuthentication(const(char)[] username, const(char)[] password, const(char)[] domain = "");

Установить имя пользователя, пароль и (необязательно) домен для аутентификации.

Некоторые протоколы могут потребовать аутентификацию в некоторых случаях. Используйте эту функцию для предоставления учетных данных.

Параметры:
const(char)[] username имя пользователя
const(char)[] password пароль
const(char)[] domain используется только для аутентификации NTLM и устанавливается в имя домена NTLM
void setProxyAuthentication(const(char)[] username, const(char)[] password);

Установить имя пользователя и пароль для аутентификации прокси.

Параметры:
const(char)[] username имя пользователя
const(char)[] password пароль
@property void onSend(size_t delegate(void[]) callback);

Обработчик событий, вызываемый, когда требуются данные для отправки. Длина void[] указывает максимальное количество байтов, которое может быть отправлено.

Возвращаемое значение:
Обработчик возвращает количество элементов в буфере, которые были заполнены и готовы к отправке. Специальное значение .abortRequest может быть возвращено для прерывания текущего запроса. Специальное значение .pauseRequest может быть возвращено для приостановки текущего запроса.
@property void onReceive(size_t delegate(ubyte[]) callback);

Обработчик событий, который получает входящие данные. Убедитесь, что скопируете входящие ubyte[], так как нет гарантии, что они останутся валидными после возвращения обработчика.

Возвращаемое значение:
Обработчик возвращает количество прочитанных входящих байтов. Если не весь массив является запросом, запрос прервется. Специальное значение .pauseRequest может быть возвращено для приостановки текущего запроса.
@property void onProgress(int delegate(size_t dlTotal, size_t dlNow, size_t ulTotal, size_t ulNow) callback);

Обработчик событий, который вызывается для информирования о прогрессе загрузки/скачивания.

Параметры обратного вызова
dlTotal общее количество байтов для загрузки
dlNow в настоящее время загружено байтов
ulTotal общее количество байтов для загрузки
ulNow в настоящее время загружено байтов
Тип соединения, используемый, когда URL должен использоваться для автоматического определения протокола. Эта структура используется в качестве заполнителя для параметра соединения при вызове API высокого уровня, а тип соединения (HTTP/FTP) должен определяться путем проверки параметра URL. Правила определения протокола следующие: 1, если URL начинается с ftp://, ftps:// или ftp., то предполагается FTP-соединение. 2, в противном случае предполагается HTTP-соединение.
Возвращаемое значение обратного вызова
Возврат 0 из обратного вызова сигнализирует об успехе, возврат ненулевого значения прерывает передачу.
@property void mailFrom()(const(char)[] sender);

Установка адреса электронной почты отправителя.

void mailTo()(const(char)[][] recipients...);

Установка адресов электронной почты получателей.

@property void message(string msg);

Устанавливает текст тела сообщения.

class CurlException: object.Exception;

Исключение, выбрасываемое при ошибках в функциях std.net.curl.

pure nothrow @safe this(string msg, string file = __FILE__, size_t line = __LINE__, Throwable next = null);
Параметры:
string msg Сообщение для исключения.
string file Файл, в котором произошла ошибка.
size_t line Номер строки, в которой произошла ошибка.
Throwable next Предыдущее исключение в цепочке исключений, если таковое имеется.
class CurlTimeoutException: std.net.curl.CurlException;

Исключение, выбрасываемое при ошибках таймаута в функциях std.net.curl.

pure nothrow @safe this(string msg, string file = __FILE__, size_t line = __LINE__, Throwable next = null);
Параметры:
string msg Сообщение для исключения.
string file Файл, в котором произошла ошибка.
size_t line Номер строки, в которой произошла ошибка.
Throwable next Предыдущее исключение в цепочке исключений, если таковое имеется.
class HTTPStatusException: std.net.curl.CurlException;

Исключение, выбрасываемое при ошибках запроса HTTP, например, 404 Not Found.

pure nothrow @safe this(int status, string msg, string file = __FILE__, size_t line = __LINE__, Throwable next = null);
Параметры:
int status Код состояния HTTP.
string msg Сообщение об исключении.
string file Файл, в котором произошла ошибка.
size_t line Номер строки, в которой произошла ошибка.
Throwable next Предыдущее исключение в цепочке исключений, если таковое имеется.
immutable int status;

Код состояния HTTP

alias CurlCode = int;

Равно etc.c.curl.CURLcode

alias ThrowOnError = std.typecons.Flag!"throwOnError".Flag;

Флаг, определяющий, выбрасывается ли исключение при ошибке.

struct Curl;

Обёртка для более удобного интерфейса с libcurl, чем использование простого API C. Рекомендуется использовать структуры HTTP/FTP и т. п., если не требуется прямой доступ к libcurl.

Предупреждение
Эта структура использует внутренние указатели для обратных вызовов. Выделяйте её только в стеке, если вы никогда не перемещаете или не копируете её. Это также означает передачу по ссылке при передаче Curl другим функциям. В противном случае всегда выделяйте её в куче.
void initialize();

Инициализирует экземпляр, создавая рабочий обработчик curl.

const @property bool stopped();
Curl dup();

Создаёт дубликат этого обработчика.

Новый обработчик будет иметь все параметры, установленные так же, как и у исходного. Исключением являются параметры, которые нельзя использовать в нескольких потоках; они сбрасываются, делая дубликат безопасным для использования в новом потоке.

void shutdown();

Останавливает и делает недействительным этот экземпляр curl.

Предупреждение
Не вызывайте эту функцию внутри обработчика обратного вызова, например, onReceive.
void pause(bool sendingPaused, bool receivingPaused);

Приостановка и возобновление передач.

void set(CurlOption option, const(char)[] value);

Установка строкового параметра curl.

Параметры:
CurlOption option Значение etc.c.curl.CurlOption из документации curl
const(char)[] value Строка
void set(CurlOption option, long value);

Установка целочисленного параметра curl.

Параметры:
CurlOption option Значение etc.c.curl.CurlOption из документации curl
long value Целое число
void set(CurlOption option, void* value);

Установка параметра curl типа void*.

Параметры:
CurlOption option Значение etc.c.curl.CurlOption из документации curl
void* value Указатель
void clear(CurlOption option);

Очистка параметра типа указатель.

Параметры:
CurlOption option Значение etc.c.curl.CurlOption из документации curl
void clearIfSupported(CurlOption option);

Очистка параметра типа указатель. Не генерирует исключение, если параметр не поддерживается libcurl. Используйте с осторожностью.

Параметры:
CurlOption option Значение etc.c.curl.CurlOption из документации curl
CurlCode perform(ThrowOnError throwOnError = Yes.throwOnError);

Выполняет запрос curl, выполняя HTTP, FTP и т. д., как было настроено предварительно.

Параметры:
ThrowOnError throwOnError Выбрасывать исключение или возвращать CurlCode при ошибке
CurlCode getTiming(CurlInfo timing, ref double val);

Получение различных временных параметров, таких как время поиска имени, общее время, время подключения и т. д. Тип временного параметра передаётся через параметр timing, а значение временного параметра хранится в val. Значение доступно только если res равно etc.c.curl.CurlError.ok.

@property void onReceive(size_t delegate(InData) callback);

Обработчик событий для получения входящих данных.

Параметры:
size_t delegate(InData) callback Обратный вызов, который получает данные ubyte[]. Убедитесь, что копируете входящие данные, а не сохраняете срез.
Возвращаемое значение:
Обратный вызов возвращает количество прочитанных байтов. Если не весь массив является запросом, запрос прервётся. Специальное значение HTTP.pauseRequest может быть возвращено для приостановки текущего запроса.
Пример
import std.net.curl, std.stdio;
Curl curl;
curl.initialize();
curl.set(CurlOption.url, "http://dlang.org");
curl.onReceive = (ubyte[] data) { writeln("Got data", to!(const(char)[])(data)); return data.length;};
curl.perform();
@property void onReceiveHeader(void delegate(in char[]) callback);

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

Параметры:
void delegate(in char[]) callback Обратный вызов, получающий строку заголовка. Убедитесь, что обратный вызов копирует входящие параметры, если ему нужно их хранить, поскольку они являются ссылками на внутреннее ядро и могут измениться.
Пример
import std.net.curl, std.stdio;
Curl curl;
curl.initialize();
curl.set(CurlOption.url, "http://dlang.org");
curl.onReceiveHeader = (in char[] header) { writeln(header); };
curl.perform();
@property void onSend(size_t delegate(OutData) callback);

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

Параметры:
size_t delegate(OutData) callback Обратный вызов с буфером void[] для заполнения
Возвращаемое значение:
Обратный вызов возвращает количество элементов в буфере, которые были заполнены и готовы к отправке. Специальное значение Curl.abortRequest может быть возвращено для прерывания текущего запроса. Специальное значение Curl.pauseRequest может быть возвращено для приостановки текущего запроса.
Пример
import std.net.curl;
Curl curl;
curl.initialize();
curl.set(CurlOption.url, "http://dlang.org");

string msg = "Hello world";
curl.onSend = (void[] data)
{
    auto m = cast(void[]) msg;
    size_t length = m.length > data.length ? data.length : m.length;
    if (length == 0) return 0;
    data[0 .. length] = m[0 .. length];
    msg = msg[length..$];
    return length;
};
curl.perform();
@property void onSeek(CurlSeek delegate(long, CurlSeekPos) callback);

Обработчик событий, вызываемый, когда ядро curl необходимо выполнить поиск данных для отправки.

Параметры:
CurlSeek delegate(long, CurlSeekPos) callback Обратный вызов, получающий смещение поиска и позицию поиска etc.c.curl.CurlSeekPos
Возвращаемое значение:
Обратный вызов возвращает успешность поиска etc.c.curl.CurlSeek
Пример
import std.net.curl;
Curl curl;
curl.initialize();
curl.set(CurlOption.url, "http://dlang.org");
curl.onSeek = (long p, CurlSeekPos sp)
{
    return CurlSeek.cantseek;
};
curl.perform();
@property void onSocketOption(int delegate(curl_socket_t, CurlSockType) callback);

Обработчик событий, вызываемый, когда сокет сети был создан, но вызов connect() ещё не выполнен. Это позволяет установить различные параметры сокета.

Параметры:
int delegate(curl_socket_t, CurlSockType) callback Обратный вызов, получающий сокет и тип сокета etc.c.curl.CurlSockType
Возвращаемое значение:
Возврат 0 от обратного вызова сигнализирует об успехе, возврат 1 сигнализирует об ошибке и заставляет curl закрыть сокет
Пример
import std.net.curl;
Curl curl;
curl.initialize();
curl.set(CurlOption.url, "http://dlang.org");
curl.onSocketOption = delegate int(curl_socket_t s, CurlSockType t) { /+ do stuff +/ };
curl.perform();
@property void onProgress(int delegate(size_t dlTotal, size_t dlNow, size_t ulTotal, size_t ulNow) callback);

Обработчик событий, вызываемый для информирования о прогрессе загрузки/загрузки.

Параметры:
int delegate(size_t dlTotal, size_t dlNow, size_t ulTotal, size_t ulNow) callback Обратный вызов, получающий (общее количество байтов для загрузки, загруженные байты, общее количество байтов для загрузки, загруженные байты).
Возвращаемое значение:
Возврат 0 от обратного вызова сигнализирует об успехе, возврат ненулевого значения прерывает передачу
Пример
import std.net.curl, std.stdio;
Curl curl;
curl.initialize();
curl.set(CurlOption.url, "http://dlang.org");
curl.onProgress = delegate int(size_t dltotal, size_t dlnow, size_t ultotal, size_t ulnow)
{
    writeln("Progress: downloaded bytes ", dlnow, " of ", dltotal);
    writeln("Progress: uploaded bytes ", ulnow, " of ", ultotal);
    return 0;
};
curl.perform();

© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_net_curl.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API