码迷,mamicode.com
首页 > 编程语言 > 详细

D语言中使用Curl读取网页

时间:2016-08-06 21:48:14      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

      D语言中对Curl库有两个包, 一个是etc.c.curl,一个是std.net.curl,其中etc.c.curl是原始的libcurl库的c语言接口转化为D语言的接口,使用这个包里的函数,可以更原始的方法使用libcurl库。而std.net.curl包则是在etc.c.curl基础上对libcurl库的调用做了一个封装,让使用者使用起来更加方便。使用etc.c.curl与c语言里使用curl基本上完全一样,没什么大的区别,这里不讨论。下面只是简单介绍一下使用std.net.curl来编写一个完整的http请求。

      std.net.curl中对libcurl的封装主要在struct HTTP这个结构里完成,必须要处理的函数有

     1) onReceive回调函数,用于处理接收到的数据。

     2) perform 函数,用于同步处理请求。 curl是可以做异步处理的,这里不详解。

     3) method属性,设置请求协议类型get,post。其它不介绍。

     4) setPostData 设置post的数据

     5) responseHeaders属性, 获取返回数据的头。

     6) addRequestHeader函数,添加自定义的头,也可以先使用clearRequestHeaders清空默认的请求头

     7) setCookie设置自己的cookie项,应该说是添加。

import std.stdio;
import std.traits;
import std.format;
import core.thread;
private import std.net.curl;
private import std.conv;
private import excode;

int main(string[] argv)
{
    try
    {
        HTTP http = HTTP("http://www.baidu.com/");
        ubyte[] res;
        http.onReceive = (data) { res ~= data; return data.length; };
        http.method = HTTP.Method.get;
        http.perform();

        auto str = cast(string)(res);
        auto tmp = GBK2UNI(str);
        writeln(tmp);
    }
    catch(Throwable e)
    {
        writeln("err:",e);
    }
    readln();
    return 0;
}

技术分享

      在包中有get方法与post方法,可以更简单的使用。

     下面的例子直接使用get方法取网页。

import std.stdio;
import std.traits;
import std.format;
import core.thread;
private import std.net.curl;
private import std.conv;
private import excode;

int main(string[] argv)
{
    try
    {
        auto text = get("http://www.baidu.com/");
        auto tmp = GBK2UNI(text);
        writeln(tmp);
    }
    catch(Throwable e)
    {
        writeln("err:",e);
    }
    readln();
    return 0;
}

     当然直接使用post方法也是一样的简单。

     excode使用appender来做字符串的处理,好像性能并不是很好。下次需要做一下详细的测试。

 

 

作者:宛宏南

D语言中使用Curl读取网页

标签:

原文地址:http://www.cnblogs.com/wanhongnan/p/5744812.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!