热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c语言easy,【EasyDL】C语言请求示例代码

此文给出的为C语言调用百度EasyDL的示例代码图片转base64请自行处理在用sprintf这个函数的时候把json数据格式化输入的时候要自己添加结束符其他语言调用336001错

此文给出的为 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 &#61; statbuff.st_size;

return filesize;

}

char * base64_encode( const unsigned char * bindata, char * base64, int binlength )

{

int i, j;

unsigned char current;

for ( i &#61; 0, j &#61; 0 ; i

{

current &#61; (bindata[i] >> 2) ;

current &&#61; (unsigned char)0x3F;

base64[j&#43;&#43;] &#61; base64char[(int)current];

current &#61; ( (unsigned char)(bindata[i] <<4 ) ) & ( (unsigned char)0x30 ) ;

if ( i &#43; 1 >&#61; binlength )

{

base64[j&#43;&#43;] &#61; base64char[(int)current];

base64[j&#43;&#43;] &#61; &#39;&#61;&#39;;

base64[j&#43;&#43;] &#61; &#39;&#61;&#39;;

break;

}

current |&#61; ( (unsigned char)(bindata[i&#43;1] >> 4) ) & ( (unsigned char) 0x0F );

base64[j&#43;&#43;] &#61; base64char[(int)current];

current &#61; ( (unsigned char)(bindata[i&#43;1] <<2) ) & ( (unsigned char)0x3C ) ;

if ( i &#43; 2 >&#61; binlength )

{

base64[j&#43;&#43;] &#61; base64char[(int)current];

base64[j&#43;&#43;] &#61; &#39;&#61;&#39;;

break;

}

current |&#61; ( (unsigned char)(bindata[i&#43;2] >> 6) ) & ( (unsigned char) 0x03 );

base64[j&#43;&#43;] &#61; base64char[(int)current];

current &#61; ( (unsigned char)bindata[i&#43;2] ) & ( (unsigned char)0x3F ) ;

base64[j&#43;&#43;] &#61; base64char[(int)current];

}

base64[j] &#61; &#39;\0&#39;;

return base64;

}

int base64_decode( const char * base64, unsigned char * bindata )

{

int i, j;

unsigned char k;

unsigned char temp[4];

for ( i &#61; 0, j &#61; 0; base64[i] !&#61; &#39;\0&#39; ; i &#43;&#61; 4 )

{

memset( temp, 0xFF, sizeof(temp) );

for ( k &#61; 0 ; k <64 ; k &#43;&#43; )

{

if ( base64char[k] &#61;&#61; base64[i] )

temp[0]&#61; k;

}

for ( k &#61; 0 ; k <64 ; k &#43;&#43; )

{

if ( base64char[k] &#61;&#61; base64[i&#43;1] )

temp[1]&#61; k;

}

for ( k &#61; 0 ; k <64 ; k &#43;&#43; )

{

if ( base64char[k] &#61;&#61; base64[i&#43;2] )

temp[2]&#61; k;

}

for ( k &#61; 0 ; k <64 ; k &#43;&#43; )

{

if ( base64char[k] &#61;&#61; base64[i&#43;3] )

temp[3]&#61; k;

}

bindata[j&#43;&#43;] &#61; ((unsigned char)(((unsigned char)(temp[0] <<2))&0xFC)) |

((unsigned char)((unsigned char)(temp[1]>>4)&0x03));

if ( base64[i&#43;2] &#61;&#61; &#39;&#61;&#39; )

break;

bindata[j&#43;&#43;] &#61; ((unsigned char)(((unsigned char)(temp[1] <<4))&0xF0)) |

((unsigned char)((unsigned char)(temp[2]>>2)&0x0F));

if ( base64[i&#43;3] &#61;&#61; &#39;&#61;&#39; )

break;

bindata[j&#43;&#43;] &#61; ((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 &#61; 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 &#61; 0 ; i <2048 ; i &#43;&#43; )

{

base64[i] &#61; fgetc(fp_in);

if ( base64[i] &#61;&#61; EOF )

break;

else if ( base64[i] &#61;&#61; &#39;\n&#39; || base64[i] &#61;&#61; &#39;\r&#39; )

i --;

}

bytes &#61; 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 &#61; fwrite(ptr, size, nmemb, (FILE *)fp);

return written;

}

int postUrl()

{

CURL *curl;

CURLcode res;

char * imagedatapoint &#61; NULL;

char szJsonData[65535] &#61; {0};

sprintf(szJsonData,"{\"image\":\"%s\",\"top_num\":5}",imagedatapoint);//imagedatapoint 是base64编码好的图像数据编码函数上面有

char strCurlOpt_url[] &#61;"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/classification/ncpsb?access_token&#61;24.6871ee410bf772d.......";

//等号后面换成你自己的access_token. 接口地址记得替换成自己的哦

if((fp&#61;fopen("/usr/local/x86_curl/1.txt","w"))&#61;&#61;NULL)

{

printf("fopen( /opt/1.txt) fail\n");

exit(1);

}

struct curl_slist * header &#61; NULL;

header &#61; curl_slist_append(header,"Content-Type: application/json;charset&#61;UTF-8");

if(NULL &#61;&#61; header)

{

printf("append is error\n");

exit(-1);

}

curl &#61; 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 &#61; 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();

}



推荐阅读
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • 三角测量计算三维坐标的代码_双目三维重建——层次化重建思考
    双目三维重建——层次化重建思考FesianXu2020.7.22atANTFINANCIALintern前言本文是笔者阅读[1]第10章内容的笔记,本文从宏观的角度阐 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
author-avatar
1237i
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有