如何在D上获取服务器响应代码?

时间:2014-12-18 07:46:52

标签: http d

我需要检查D中的服务器响应代码。例如,检查服务器是否返回404,200或其他代码。

我看了std.net.curl,但我不明白如何使用它。

我不确定但是我可能需要使用选项请求 例如:

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

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

这个代码对我不起作用。我收到了下一个错误:

F:\temp\1>app.exe
core.exception.RangeError@app.d(8): Range violation
----------------
0x0041DB08
0x00402092
0x00426D8E
0x00426D63
0x00426C79
0x0041D857
0x7636338A in BaseThreadInitThunk
0x77C79F72 in RtlInitializeExceptionChain
0x77C79F45 in RtlInitializeExceptionChain

2 个答案:

答案 0 :(得分:2)

您只需附加statusLine回调:

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

答案 1 :(得分: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括号中的数据意味着

,我将非常感激。