2014-12-18 4 views
2

Мне нужно проверить код ответа сервера в D. Например, проверьте, возвращаются ли серверы 404, 200 или какой-либо другой код.Как получить код ответа сервера на D?

Я посмотрел std.net.curl, но я не понимаю, как его использовать.

Я не уверен, но возможно мне нужно использовать запрос опции Ex:

import std.net.curl; 
import std.stdio; 

void main() 
{ 
    auto http = HTTP(); 
    options("dlang.org", null, http); 
    writeln("Allow set to " ~ http.responseHeaders["Allow"]); 
} 

Это cее не работает для меня. Я получаю следующее сообщение об ошибке:

F:\temp\1>app.exe 
[email protected](8): Range violation 
---------------- 
0x0041DB08 
0x00402092 
0x00426D8E 
0x00426D63 
0x00426C79 
0x0041D857 
0x7636338A in BaseThreadInitThunk 
0x77C79F72 in RtlInitializeExceptionChain 
0x77C79F45 in RtlInitializeExceptionChain 

ответ

2

Вы просто прикрепить строки статуса обратного вызова:

auto http = HTTP("dlang.org"); 
http.onReceiveStatusLine = (HTTP.StatusLine status){ responceCode = status.code; }; 
//attach onreceive callback as well 
http.perform(); 
+0

Я получаю сообщение об ошибке «Ошибка: неопределенный идентификатор StatusLine», что Я должен добавить к вашему примеру, чтобы получить его работу, кроме функции main()? – Suliman

+0

Я не могу понять, почему я получаю содержимое всей страницы вместо кода ответа сервера: 'auto http = HTTP (" dlang.org "); http.onReceiveStatusLine = (статус HTTP.StatusLine) {writeln (status.code); }; http.perform(); ' Я изменил StatusLine на HTTP.StatusLine. Правильно ли я понимаю, что структуры в D могут быть внутренними (один в другой StatusLine в HTTP)? – Suliman

0

Рабочий код:

import std.stdio; 
import std.net.curl; 

void main() 
{ 

auto http = HTTP("dlang.org"); 
http.onReceiveStatusLine = (HTTP.StatusLine status){ writeln(status.code); }; 
http.onReceive = (ubyte[] data) { /+ drop +/ return data.length; }; 
http.perform(); 

} 

Я был бы очень благодарен, если кто-нибудь объяснит мне, почему я должен вызвать onReceive и какие данные в onReceive фигурные скобки означает

+0

вы присоединяете обратный вызов onReceive, передаваемый параметр - это кусок данных, поступающих с сервера (обычно то, что вы делаете после получения с сервера) –

Смежные вопросы