如何解决使用带有 curl 库的 http 协议在云中发送数据
我是 curl 库的新手。我有一个网站,我正在向该网站发送数据,但它并没有到达那里。以下是我用于在网站上发送数据的代码。 '''
struct msgbuff v;
int id1,id2;
char cmd[100];
char log[250];
int id;
id=msgget(3,IPC_CREAT|0777);
if(id==-1)
{
fprintf(stderr,"Error in msgget %d - %s\n",errno,strerror(errno));
sprintf(cmd,"logger -s %s >> syserr.log 2>&1",strerror(errno));
system(cmd);
return -1;
}
struct logbuff msglog;
id2=msgget(5,IPC_CREAT|0777);
if(id2==-1)
{
fprintf(stderr,strerror(errno));
system(cmd);
return -1;
}
struct stat file_stat;
unsigned char *data;
FILE *fp;
if (stat("/home/abhishek/Desktop/data_small.csv",&file_stat) == -1) {
perror("stat");
exit(0);
}
printf("size=%d\n",file_stat.st_size );
data=(unsigned char *)malloc(file_stat.st_size+10);
fp=fopen("/home/abhishek/Desktop/data_small.csv","r");
if(fp==NULL)
{
perror("fopen");
exit(0);
}//strcat(data,"file:");
//fread(data+strlen("file="),1,file_stat.st_size,fp);
//puts(data);
printf("mqID=%d in %d\n",id,getpid());
char current_Date[40];
char current_time[20];
time_t t;
struct tm *tmptr;
t=time(0);
tmptr=localtime(&t);
strftime(current_Date,40,"%F",tmptr);
strftime(current_time,20,"%T",tmptr);
strcat(current_Date," ");
strcat(current_Date,current_time);
sprintf(cmd,"datetime: %s",current_Date);
CURL *curl;
CURLcode res;
//char buffer[2000];
curl_mime *form = NULL;
curl_mimepart *field = NULL;
struct curl_slist *headers = NULL,*headers_sensor = NULL;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
form = curl_mime_init(curl);
/* Fill in the file upload field */
field = curl_mime_addpart(form);
curl_mime_name(field,"file");
curl_mime_filedata(field,"data_small.csv");
/* Fill in the filename field */
field = curl_mime_addpart(form);
curl_mime_name(field,"filename");
curl_mime_data(field,"data_small.csv",CURL_ZERO_TERMINATED);
headers = curl_slist_append(headers,"macaddress: a8:1b:6a:fa:97:f5");
headers = curl_slist_append(headers,"snapshotno: 100");
headers = curl_slist_append(headers,"hthvcid: 1");
headers = curl_slist_append(headers,"filename: data_small.csv");
headers = curl_slist_append(headers,cmd);
headers = curl_slist_append(headers,"token:ELEC/CN");
curl_easy_setopt(curl,CURLOPT_URL,"https://pqr.deltaww.com/csvapi");
curl_easy_setopt(curl,CURLOPT_HTTPHEADER,headers);
curl_easy_setopt(curl,CURLOPT_MIMEPOST,form);
curl_easy_setopt(curl,CURLOPT_VERBOSE,1L);
curl_easy_setopt(curl,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_2_0);
if(curl) {
/* Create the form */
// curl_easy_setopt(curl,CURLOPT_POSTFIELDS,data);
/* if we don't provide POSTFIELDSIZE,libcurl will strlen() by
itself */
// curl_easy_setopt(curl,CURLOPT_POSTFIELDSIZE,(long)strlen(data));
/* Perform the request,res will get the return code */
printf("\n\nabhishek\n\n");
res = curl_easy_perform(curl);
printf("\n\nabhishek\n\n");
/* Check for errors */
if(res != CURLE_OK)
{
fprintf(stderr,"curl_easy_perform() Failed: %s\n",curl_easy_strerror(res));
}
else
{
printf("%s%s\n","connection ok data sent",readbuff);
// printf("%s\n",strstr(readbuff,"true") );
}
}
curl_easy_cleanup(curl);
curl_mime_free(form);
curl_slist_free_all(headers);
我得到的输出是。
** 大小=1030 11380 中的 mqID=0 阿布舍克
- 正在尝试 52.163.200.50:443...
- TCP_NODELAY 设置
- 连接到 pqr.deltaww.com (52.163.200.50) 端口 443 (#0)
- 在 /etc/ssl/certs 中找到 391 个证书
- ALPN,提供 h2
- ALPN,提供 http/1.1
- 使用 TLS1.2 / ECDHE_RSA_AES_256_GCM_SHA384 的 SSL 连接
- 服务器证书验证正常
- 跳过服务器证书状态验证
- 通用名称:*.deltaww.com(匹配)
- 服务器证书到期日期正常
- 服务器证书激活日期确定
- 证书公钥:RSA
- 证书版本:#3
- 主题:C=台湾,邮政编码=11491,L=台北市,街道=编号。 186,Ruiguang Rd.,O=Delta Electronics inc.,OU=IT,CN=*.deltaww.com
- 开始日期:格林威治标准时间 2020 年 8 月 3 日星期一 00:00:00
- 失效日期:2022 年 10 月 22 日星期六 23:59:59 GMT
- 发行人:C=GB,ST=Greater Manchester,L=Salford,O=Sectigo Limited,CN=Sectigo RSA 组织验证安全服务器 CA
- ALPN,服务器不同意协议
POST /csvapi HTTP/1.1 主持人:pqr.deltaww.com 接受:/ 传输编码:分块 文件名:data_small.csv 内容类型:多部分/表单数据;边界=------------------------daf89a8ccd928302 预期:100-继续
** 在输出中,我无法理解最后一行“curl_easy_perform() Failed: Failed to open/read local data from file/application”。请帮助我这一行的含义是什么,或者我需要改变什么才能使 curl_easy_perform() 成功。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。