【EasyDL】C语言请求示例代码
756665228 发布于2018-10-12 09:30 浏览:2078 回复:5
3
收藏
最后编辑于2019-02-13

      此文给出的为 C语言 调用百度EasyDL的示例代码 图片转base64请自行处理

      在用sprintf这个函数的时候 把json数据格式化输入的时候 要自己添加结束符

  • 其他语言调用336001错误解决方案或示例代码 http://aixiaoshuai.mydoc.io/?t=236073

 

  • C语言示例代码:

来源于热心开发者

#include 
#include 
#include 
#include 
#include 
#include 
#include 



//图片的base64数据 不需要urlencode处理
const char * base64char = "";

unsigned long get_file_size(const char * path)
{
    unsigned long filesize =-1;
    struct stat statbuff;
    if(stat(path,&statbuff) < 0)
    	{
                 return filesize;
	}
     else
	 	   filesize = statbuff.st_size;

	 return filesize;
}


char * base64_encode( const unsigned char * bindata, char * base64, int binlength )
{
    int i, j;
    unsigned char current;

    for ( i = 0, j = 0 ; i < binlength ; i += 3 )
    {
        current = (bindata[i] >> 2) ;
        current &= (unsigned char)0x3F;
        base64[j++] = base64char[(int)current];

        current = ( (unsigned char)(bindata[i] << 4 ) ) & ( (unsigned char)0x30 ) ;
        if ( i + 1 >= binlength )
        {
            base64[j++] = base64char[(int)current];
            base64[j++] = '=';
            base64[j++] = '=';
            break;
        }
        current |= ( (unsigned char)(bindata[i+1] >> 4) ) & ( (unsigned char) 0x0F );
        base64[j++] = base64char[(int)current];

        current = ( (unsigned char)(bindata[i+1] << 2) ) & ( (unsigned char)0x3C ) ;
        if ( i + 2 >= binlength )
        {
            base64[j++] = base64char[(int)current];
            base64[j++] = '=';
            break;
        }
        current |= ( (unsigned char)(bindata[i+2] >> 6) ) & ( (unsigned char) 0x03 );
        base64[j++] = base64char[(int)current];

        current = ( (unsigned char)bindata[i+2] ) & ( (unsigned char)0x3F ) ;
        base64[j++] = base64char[(int)current];
    }
    base64[j] = '\0';
    return base64;
}

int base64_decode( const char * base64, unsigned char * bindata )
{
    int i, j;
    unsigned char k;
    unsigned char temp[4];
    for ( i = 0, j = 0; base64[i] != '\0' ; i += 4 )
    {
        memset( temp, 0xFF, sizeof(temp) );
        for ( k = 0 ; k < 64 ; k ++ )
        {
            if ( base64char[k] == base64[i] )
                temp[0]= k;
        }
        for ( k = 0 ; k < 64 ; k ++ )
        {
            if ( base64char[k] == base64[i+1] )
                temp[1]= k;
        }
        for ( k = 0 ; k < 64 ; k ++ )
        {
            if ( base64char[k] == base64[i+2] )
                temp[2]= k;
        }
        for ( k = 0 ; k < 64 ; k ++ )
        {
            if ( base64char[k] == base64[i+3] )
                temp[3]= k;
        }

        bindata[j++] = ((unsigned char)(((unsigned char)(temp[0] << 2))&0xFC)) |
                ((unsigned char)((unsigned char)(temp[1]>>4)&0x03));
        if ( base64[i+2] == '=' )
            break;

        bindata[j++] = ((unsigned char)(((unsigned char)(temp[1] << 4))&0xF0)) |
                ((unsigned char)((unsigned char)(temp[2]>>2)&0x0F));
        if ( base64[i+3] == '=' )
            break;

        bindata[j++] = ((unsigned char)(((unsigned char)(temp[2] << 6))&0xF0)) |
                ((unsigned char)(temp[3]&0x3F));
    }
    return j;
}

void encode(FILE * fp_in, FILE * fp_out)
{
    unsigned char bindata[2050];
    char base64[4096];
    size_t bytes;
    while ( !feof( fp_in ) )
    {
        bytes = fread( bindata, 1, 2049, fp_in );
        base64_encode( bindata, base64, bytes );
        fprintf( fp_out, "%s", base64 );
    }
}

void decode(FILE * fp_in, FILE * fp_out)
{
    int i;
    unsigned char bindata[2050];
    char base64[4096];
    size_t bytes;
    while ( !feof( fp_in ) )
    {
        for ( i = 0 ; i < 2048 ; i ++ )
        {
            base64[i] = fgetc(fp_in);
            if ( base64[i] == EOF )
                break;
            else if ( base64[i] == '\n' || base64[i] == '\r' )
                i --;
        }
        bytes = base64_decode( base64, bindata );
        fwrite( bindata, bytes, 1, fp_out );
    }
}


FILE *fp;

//这个函数是为了符合CURLOPT_WRITEFUNCTION而构造的
//完成数据保存功能
size_t WriteData(void *ptr, size_t size, size_t nmemb, void *stream)
{
    int written = fwrite(ptr, size, nmemb, (FILE *)fp);
    return written;
}
int postUrl()
{
    CURL *curl;
    CURLcode res;
    char * imagedatapoint = NULL;
    char szJsonData[65535] = {0};
    sprintf(szJsonData,"{\"image\":\"%s\",\"top_num\":5}",imagedatapoint);//imagedatapoint 是base64编码好的图像数据编码函数上面有
    char strCurlOpt_url[] ="https://aip.baidubce.com/rpc/2.0/ai_custom/v1/classification/ncpsb?access_token=24.6871ee410bf772d.......";
  //等号后面换成你自己的access_token.  接口地址记得替换成自己的哦
    if((fp=fopen("/usr/local/x86_curl/1.txt","w"))==NULL)
	{
    	       printf("fopen( /opt/1.txt)   fail\n");
		exit(1);
	}
   
     struct curl_slist * header = NULL;
     header = curl_slist_append(header,"Content-Type: application/json;charset=UTF-8");
     if(NULL == header)
     {
	        printf("append is error\n");
		 exit(-1);
     }
	
    curl = curl_easy_init();
    if (curl)
    {
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header);
        curl_easy_setopt(curl, CURLOPT_URL,strCurlOpt_url); // 指定url    
        curl_easy_setopt(curl, CURLOPT_HTTPPOST, 1L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
	 curl_easy_setopt(curl, CURLOPT_POSTFIELDS,szJsonData);
	 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteData);
   	 res = curl_easy_perform(curl);
        printf("%d  %s\n",res, curl_easy_strerror(res));
        curl_easy_cleanup(curl);
        curl_slist_free_all(header);
    }
	
    fclose(fp);
    return 1;
}


int main(void)
{
	curl_global_init(CURL_GLOBAL_SSL);
	postUrl();
}
收藏
点赞
3
个赞
共5条回复 最后由彦丶子凡回复于2019-02-13 13:58
#6彦丶子凡回复于2019-02-13 13:58:48

库的话自己去github下载就可以了

0
#5cd_xt_AI回复于2018-11-15 19:11:50

前辈  这个sdk的库怎么去调啊?需要哪些库啊?

0
#4756665228回复于2018-10-26 21:29:52
#3 彦丶子凡回复
小帅下次直接代码贴图片吧,这个看着太累

图片不能复制粘贴呀。

1
#3彦丶子凡回复于2018-10-26 15:19:55

小帅下次直接代码贴图片吧,这个看着太累

0
#2liguanghui2588回复于2018-10-22 17:51:54

好熟悉的int main()主函数代码,可以调用一下

0
TOP
切换版块