curl向web服务器发送json数据

简介: c++使用libcurl: 1 /* 2 *g++ demo.cpp -g -Wall -lcurl 3 */ 4 5 #include 6 #include 7 #include 8 #include 9 #include ...

c++使用libcurl:

  1 /*
  2  *g++ demo.cpp  -g -Wall -lcurl
  3  */
  4 
  5 #include <string.h>
  6 #include <stdlib.h>
  7 #include <stdio.h>
  8 #include <iostream>
  9 #include <curl/curl.h>
 10 
 11 int getUrl(const char* filename)
 12 {
 13     CURL* curl;
 14     CURLcode res;
 15     FILE* fp; 
 16     if((fp=fopen(filename, "w"))==NULL){
 17         return -1; 
 18     }   
 19     struct curl_slist *headers = NULL;
 20     headers = curl_slist_append(headers, "Accept:Agent-007");
 21     curl = curl_easy_init();    
 22     if(curl){
 23         curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
 24         curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com");
 25         curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
 26         curl_easy_setopt(curl, CURLOPT_HEADERDATA, fp);
 27 
 28         //0: success, other: failure
 29         res = curl_easy_perform(curl);
 30         if(res != 0){ 
 31             std::cout <<"error:"<<curl_easy_strerror(res) << std::endl;
 32         }
 33         curl_slist_free_all(headers);
 34         curl_easy_cleanup(curl);
 35         fclose(fp);
 36     }
 37     return res;
 38 }
 39 
 40 /*
 41 int postUrl(const char* filename)
 42 {
 43     CURL* curl;
 44     CURLcode res;
 45     FILE* fp;
 46 
 47     if((fp=fopen(filename, "w"))==NULL){
 48         return 1;
 49     }
 50     curl = curl_easy_init();
 51     if(curl){
 52     
 53     }
 54 }
 55 */
 56 
 57 //typedef  int  (* func)(int,  int);
 58 typedef  size_t (*cb_func)(void*, size_t, size_t, void*);
 59 size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp) {
 60     FILE *fptr = (FILE*)userp;
 61     fwrite(buffer, size, nmemb, fptr);
 62     return size*nmemb;
 63 }
 64 
 65 int PostData(const char* postdata, const char* url,
 66              cb_func write_data, void* fptr)
 67 //int PostData(const char* postdata, const char* url)
 68 {
 69     CURL* curl = NULL;
 70     CURLcode res;
 71     char tmp[32] = {0};
 72     struct curl_slist* headers = NULL;
 73     if(!url){
 74         return -1;
 75     }
 76     std::cout <<"send data url:" << url << std::endl;
 77     snprintf(tmp, sizeof(tmp), "Content-Length: %d", (int)strlen(postdata));
 78     std::cout <<"Content-Length: " << tmp << std::endl;
 79     headers = curl_slist_append(headers, "Accept: application/json");
 80     headers = curl_slist_append(headers, "Content-Type: application/json");
 81     headers = curl_slist_append(headers, "charset: utf-8");
 82     headers = curl_slist_append(headers, tmp);
 83 
 84     curl_global_init(CURL_GLOBAL_ALL);
 85     curl = curl_easy_init();
 86     if(curl){
 87         curl_easy_setopt(curl, CURLOPT_URL,url);
 88         curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
 89         curl_easy_setopt(curl, CURLOPT_TIMEOUT, 1); //超时时间1s
 90         curl_easy_setopt(curl, CURLOPT_POST, 1L);
 91         curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata);
 92         curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
 93         curl_easy_setopt(curl, CURLOPT_WRITEDATA, fptr);
 94         //curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);   //debug 
 95         res = curl_easy_perform(curl);
 96         if(res!=0){
 97             std::cout<<"error no:"<<curl_easy_strerror(res)<<std::endl;
 98         }
 99         curl_slist_free_all(headers);
100         curl_easy_cleanup(curl);
101         return res;
102     }else{
103         curl_slist_free_all(headers);
104         return -2;
105     }
106 }
107 
108 int main()
109 {
110     const char* tt = "./aa.out";
111     int aa =  getUrl(tt);
112     std::cout << "return :" << aa << std::endl;
113     FILE* fptr;
114     if((fptr=fopen("./result", "w"))==NULL){
115         std::cout << "file open error" << std::endl;
116         exit(1);
117     }
118 
119     const char* jsondata = "{\"usrname\": \"cp\", \"passwd\": \"test\"}";
120      const char* url = "http://192.168.2.163:8080/mystorage/mytest.php";
121     aa = PostData(jsondata, url, write_data, fptr);
122     return 0;
123 }

 

相关文章
|
26天前
|
前端开发 JavaScript Python
Python Web应用中的WebSocket实战:前后端分离时代的实时数据交换
在前后端分离的Web应用开发模式中,如何实现前后端之间的实时数据交换成为了一个重要议题。传统的轮询或长轮询方式在实时性、资源消耗和服务器压力方面存在明显不足,而WebSocket技术的出现则为这一问题提供了优雅的解决方案。本文将通过实战案例,详细介绍如何在Python Web应用中运用WebSocket技术,实现前后端之间的实时数据交换。
51 0
|
6天前
|
存储 数据挖掘
服务器数据恢复—用RAID5阵列中部分盘重建RAID5如何恢复原raid5阵列数据?
服务器数据恢复环境: 一台服务器挂接一台存储,该存储中有一组由5块硬盘组建的RAID5阵列。 服务器故障: 存储raid5阵列中有一块硬盘掉线。由于RAID5的特性,阵列并没有出现问题。工作一段时间后,服务器出现故障,用户方请人维修。维修人员在没有了解故障磁盘阵列环境的情况下,用另外4块硬盘(除去掉线的硬盘)重新创建了一组全新的RAID5阵列并完成数据同步,导致原raid5阵列数据全部丢失。
|
18天前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
25 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
2月前
|
存储 弹性计算 缓存
阿里云服务器ECS通用型实例规格族特点、适用场景、指标数据解析
阿里云服务器ECS提供了多种通用型实例规格族,每种规格族都针对不同的计算需求、存储性能、网络吞吐量和安全特性进行了优化。以下是对存储增强通用型实例规格族g8ise、通用型实例规格族g8a、通用型实例规格族g8y、存储增强通用型实例规格族g7se、通用型实例规格族g7等所有通用型实例规格族的详细解析,包括它们的核心特点、适用场景、实例规格及具体指标数据,以供参考。
阿里云服务器ECS通用型实例规格族特点、适用场景、指标数据解析
|
23天前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
43 3
|
23天前
|
弹性计算 Linux 数据库
阿里云国际版如何迁移Linux云服务器系统盘中的数据
阿里云国际版如何迁移Linux云服务器系统盘中的数据
|
13天前
|
存储 前端开发 API
前端开发中,Web Storage的存储数据的方法localstorage和sessionStorage的使用及区别
前端开发中,Web Storage的存储数据的方法localstorage和sessionStorage的使用及区别
63 0
|
15天前
|
存储 JSON 前端开发
JSON与现代Web开发:数据交互的最佳选择
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也便于机器解析和生成。它以文本格式存储数据,常用于Web应用中的数据传输,尤其是在客户端和服务器之间。
29 0
|
2月前
|
开发框架 JSON 缓存
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
在数字化浪潮推动下,RESTful API成为Web开发中不可或缺的部分。本文详细介绍了在Python环境下如何设计并实现高效、可扩展的RESTful API,涵盖框架选择、资源定义、HTTP方法应用及响应格式设计等内容,并提供了基于Flask的示例代码。此外,还讨论了版本控制、文档化、安全性和性能优化等最佳实践,帮助开发者实现更流畅的数据交互体验。
65 1
|
2月前
|
存储 弹性计算 网络协议
阿里云ECS内存型实例规格族特点、适用场景、指标数据参考
阿里云ECS提供了多样化的内存型实例规格族,专为需要高性能内存资源的应用场景设计。从最新的r8a系列到经过优化的re6p系列,旨在提供稳定、高效且安全的计算环境。这些实例不仅具备强大的计算性能与内存配比,还通过支持ESSD云盘和高效网络协议,显著提升了存储I/O能力和网络带宽,适用于大数据分析、高性能数据库、内存密集型应用等多种场景,为用户带来卓越的计算体验。本文将详细解析阿里云ECS中的多个内存型实例规格族,包括它们的核心特点、适用场景、实例规格及具体指标数据,为用户在云计算资源选型时提供参考。