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.
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-urlencodingconst(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)[] urlURL для получения содержимого KeepTerminator keepTerminatorYes.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)[] urlURL для получения содержимого 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)[] urlURL для получения содержимого const(PostUnit)[] postDataДанные для HTTP Post KeepTerminator keepTerminatorYes.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)[] urlURL для получения содержимого 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 - 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);
-
Зарегистрировать обработчик событий, который вызывается для информирования о прогрессе загрузки/загрузки.
- Параметры обратного вызова
Тип соединения, используемый, когда URL должен использоваться для автоматического определения протокола. Этот структура используется как заполнитель для параметра соединения при вызове API высокого уровня, и тип соединения (HTTP/FTP) должен определяться по URL-параметру. Правила определения протокола: 1, если URL начинается с ftp://, ftps:// или ftp., то предполагается соединение FTP. 2, HTTP соединение в противном случае.dlTotalобщее количество байтов для загрузки dlNowтекущее количество загруженных байтов ulTotalобщее количество байтов для загрузки ulNowтекущее количество загруженных байтов - Возвращаемое значение обратного вызова
- Возврат 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 condCurlTimeCond.{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 contentTypeMIME-тип данных, например, "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);
-
Обработчик событий, вызываемый для информирования о ходе загрузки/скачивания.
- Параметры обратного вызова
Тип соединения, используемый, когда URL должен быть использован для автоматического определения протокола. Эта структура используется в качестве заглушки для параметра соединения при вызове API высокого уровня, а тип соединения (HTTP/FTP) должен определяться по параметру URL. Правила определения протокола: 1. Если URL начинается с ftp://, ftps:// или ftp., то предполагается FTP-соединение. 2. В противном случае предполагается HTTP-соединение.dlTotalобщее количество байтов для загрузки dlNowв настоящее время загруженные байты ulTotalобщее количество байтов для загрузки ulNowв настоящее время загруженные байты - Возвращаемое значение обратного вызова
- Возврат 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);
-
Обработчик событий, который вызывается для информирования о прогрессе загрузки/скачивания.
- Параметры обратного вызова
Тип соединения, используемый, когда URL должен использоваться для автоматического определения протокола. Эта структура используется в качестве заполнителя для параметра соединения при вызове API высокого уровня, а тип соединения (HTTP/FTP) должен определяться путем проверки параметра URL. Правила определения протокола следующие: 1, если URL начинается с ftp://, ftps:// или ftp., то предполагается FTP-соединение. 2, в противном случае предполагается HTTP-соединение.dlTotalобщее количество байтов для загрузки dlNowв настоящее время загружено байтов ulTotalобщее количество байтов для загрузки ulNowв настоящее время загружено байтов - Возвращаемое значение обратного вызова
- Возврат 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из документации curlconst(char)[] valueСтрока
- void set(CurlOption option, long value);
-
Установка целочисленного параметра curl.
- Параметры:
CurlOption optionЗначение etc.c.curl.CurlOptionиз документации curllong valueЦелое число
- void set(CurlOption option, void* value);
-
Установка параметра curl типа void*.
- Параметры:
CurlOption optionЗначение etc.c.curl.CurlOptionиз документации curlvoid* 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