【第21期】观点:人工智能到底用 GPU?还是用 FPGA?

ibcurl使用心得

转载 2013年12月04日 15:50:02
 

Libcurl为一个免费开源的,客户端url传输库,支持FTPFTPSTFTPHTTPHTTPSGOPHERTELNETDICTFILELDAP,跨平台,支持WindowsUnixLinux等,线程安全,支持Ipv6。并且易于使用。

http://curl.haxx.se/libcurl/

http://curl.haxx.se/libcurl/ 下载一个稳定的版本,注意选择OS
在使用之前请大家多阅读libcurl的文档:因为如果要实际运用到项目中,最好对libcurl有具体的了解,具体在
http://curl.haxx.se/libcurl/c/
curl_easy_setopt()
curl_easy_perform()
curl_easy_getinfo()
这三个函数的使用上,需要多去钻研,多看Samples,你才能灵活使用libcurl。
感谢这篇文章:
http://blog.163.com/xu_chao2000/blog/static/27770610200801303252802/
给了我许多启发,再次感谢!

给出我的一个简单的代码例子:
说明:
1.关键在curl_easy_setopt函数设置option,可以设置ftp,http,get,post等许多选项,请根据具体使用情况设置。

2.对取回来的数据需要进行判断,比如http下载文件,如果文件不存在,需要进行处理。因为writer是可以将buf填充404 not found等网页内容的,不能将这个内容当成文件内容,所以需要判断http web返回来的code,进行判断。

3.我有个问题,就是想得到服务器上filename的具体名称,verbose调试已经返回了,但是我在getinfo的时候,试过好多选项,但未找到这个存放真实服务器文件名的选项,如果有知道的麻烦告诉我,谢谢了!

#include "curl/curl.h"
#pragma comment(lib, 
"libcurl.lib")

long writer(void
*data, int size, int nmemb, string &content);
bool  CurlInit(CURL 
*&curl, const char* url,string &content);
bool  GetURLDataBycurl(const char* URL, string 
&content);

void main()
{
    char *url ="http://www.baidu.com/img/baidu.gif";
    string content;
    
if ( GetURLDataBycurl(url,content))
    
{
        printf(
"%s\n",content);

    }

    getchar();
}


bool CurlInit(CURL 
*&curl, const char* url,string &content)
{
    CURLcode code;
    string error;
    curl 
= curl_easy_init();
    
if (curl == NULL)
    
{
        printf( 
"Failed to create CURL connection\n");
        
return false;
    }

    code 
= curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error);
    
if (code != CURLE_OK)
    
{
        printf( 
"Failed to set error buffer [%d]\n", code );
        
return false;
    }

    curl_easy_setopt(curl, CURLOPT_VERBOSE, 
1L);
    code 
= curl_easy_setopt(curl, CURLOPT_URL, url);
    
if (code != CURLE_OK)
    
{
        printf(
"Failed to set URL [%s]\n", error);
        
return false;
    }

    code 
= curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
    
if (code != CURLE_OK)
    
{
        printf( 
"Failed to set redirect option [%s]\n", error );
        
return false;
    }

    code 
= curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
    
if (code != CURLE_OK)
    
{
        printf( 
"Failed to set writer [%s]\n", error);
        
return false;
    }

    code 
= curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);
    
if (code != CURLE_OK)
    
{
        printf( 
"Failed to set write data [%s]\n", error );
        
return false;
    }

    
return true;
}


long writer(void
*data, int size, int nmemb, string &content)
{
    long sizes 
= size * nmemb;
    string temp(data,sizes);
    content 
+= temp; 
    
return sizes;
}


bool GetURLDataBycurl(const char* URL,  string
&content)
{
    CURL 
*curl = NULL;
    CURLcode code;
    string error;

    code 
= curl_global_init(CURL_GLOBAL_DEFAULT);
    
if (code != CURLE_OK)
    
{
        printf( 
"Failed to global init default [%d]\n", code );
        
return false;
    }
 
    
    
if ( !CurlInit(curl,URL,content) )
    
{
        printf( 
"Failed to global init default [%d]\n" );
        
return PM_FALSE;
    }

    code 
= curl_easy_perform(curl);
    
if (code != CURLE_OK)
    
{
        printf( 
"Failed to get '%s' [%s]\n", URL, error);
        
return false;
    }

    long retcode 
= 0;
    code 
= curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE , &retcode); 
    
if ( (code == CURLE_OK) && retcode == 200 )
    
{
        double length 
= 0;
        code 
= curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD , &length); 
        printf(
"%d",retcode);
        FILE 
* file = fopen("1.gif","wb");
        fseek(file,
0,SEEK_SET);
        fwrite(content.c_str(),
1,length,file);
        fclose(file);

        
//struct curl_slist *list;
        
//code = curl_easy_getinfo(curl,CURLINFO_COOKIELIST,&list);
        
//curl_slist_free_all (list);

        
return true;
    }

    
else
    
{
    
//    debug1( "%s \n ",getStatusCode(retcode));
        return false;
    }

    curl_easy_cleanup(curl);
    
return false;
}

举报

相关文章推荐

关于使用libcurl的注意事项

ibcurl与CLOSE_WAIT 转载自:http://blog.sunshow.net/2010/03/libcurl-and-close-wait/ 调用libcurl下载,然后使用...

[工具]Sublime Text 2 使用心得

<a target="_blank" id="cb_post_title_url" href="http://www.cnblogs.com/leecanz/archive/2012/03/04/2379446.html" style="color: rgb(119,0,0); text-decoration: non

React-native 的第一次使用 心得

React-native 原理:实现一个3d的swpier组件 效果图 3d 的计算原理代码 import React, { Component } from 'react'; import ...

数据库版本管理工具flyway的使用心得

今天测试了一下flyway的功能,在使用过程中遇到几个问题消耗了我一上午时间,网上也没有找到相应的解决方案,自己摸索了一上午,终于搞定了。 我的项目是使用maven构建的web项目,依赖代码: &lt;dependency&gt;     &lt;groupId&gt;org.flywaydb&lt;/groupId&gt;     &lt;artifactId&gt;

基于ibcurl的跨平台多线程断点续传下载库

之前写过一个多线程断点续传的下载库,不过那个是基于一个linux的下载程序。windows下运行还好,android下就各种问题,调试起来还麻烦。后面开发游戏的时候,一方面对下载要求不高,另一方面也精...

ucosII的事件标志组的使用心得

UCOSII的FLAG使用类似于RTTHREAD的事件,我没仔细的研究过ucosII的手册,感觉RTTHREAD的事件更好用些,功能上应该是ucos跟强大 以下为例子: OS_TM...

Lua的使用心得: 数据定义和过程定义(Lua在程序中的数据定义和过程定义的界定原则的研究)

Lua在程序中的数据定义和过程定义的界定原则的研究 引言 作为宿主语言的衍生,Lua无论从数据对象的填充,还是处理过程的定制,都提供了很好的支持。甚至我们可以将全部的宿主语言都搬到Lua里来写。在这样大的灵活度下,如

关于Unity Dropdown控件的使用心得

1:首先看一下控件 自己添加了一个新的Item Image,后面会提到它的用处。 Image用来做赋值对象的,后面会提到 Lable和Arrow是用来显示初始化的文字...

IntelliJ IDEA 使用心得与常用快捷键

刚开始学习写Java的时候,用的eclipse,正式工作后,主要用的myeclipse,去年初在前辈的推荐下,在2折的时候买了正版的 IntelliJ IDEA 和 Pychar
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)