sudo apt-get install libcurl4-openssl-dev
头文件会在
abcd@abcd-virtual-machine:/usr/include/curl$ ls
curlbuild.h curl.h curlrules.h curlver.h easy.h mprintf.h multi.h stdcheaders.h typecheck-gcc.h
库文件在
/usr/lib/x86_64-linux-gnu/libcurl.so
/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4
/usr/lib/x86_64-linux-gnu/libcurl.a
/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.3
/usr/lib/x86_64-linux-gnu/libcurl.so.4
/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4.3.0
/usr/lib/x86_64-linux-gnu/libcurl.so.4.3.0
/usr/lib/x86_64-linux-gnu/pkgconfig/libcurl.pc
/usr/lib/x86_64-linux-gnu/libcurl.la
/usr/lib/x86_64-linux-gnu/libcurl.so.3
#include <string.h>
#include <stdio.h>
#include <curl/curl.h>
// ptr: 从服务器收到的数据的头指针
// size: 一个unit的长度
// nmemb: 有多少个unit
// 总长度 = size * nmemb fwrite(...)
// userdata:
// 返回值:要求等于size*nmemb
typedef struct UserData
{
char buf[1024];
int len;
}UserData;
//这个函数有可能回调N多次 收到消息就会回调
size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata)
{
// UserData* d = (char*)userdata;
UserData* d = (UserData*)userdata;
memcpy(d->buf+d->len, ptr, size*nmemb);
d->len += size*nmemb;
return size*nmemb;
}
int main()
{
// 创建一个curl对象
CURL* curl = curl_easy_init();
const char* data ="username=db&password=1";
// 设置URL
curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.169.1:10099/reg");
// 设置curl,使用POST方法发请求
// curl_easy_setopt(curl, CURLOPT_POST, 1);
// curl_easy_setopt(curl, CURLOPT_PORT, 10099);
// 设置curl,POST的数据内容
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
// curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(data));
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
UserData data1;
data1.len = 0;
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data1);
// 执行请求 向服务器发送http请求
// 从服务器接收响应,并且解析,并且打印
curl_easy_perform(curl);
/*
send_data_to_server(...);
while(1)
{
char buf[1024];
int ret = read_data_from_server(..);
if(write_callback(buf, ret, 1, NULL) != ret)
break;
}
*/
printf("%s\n",data1.buf);
data1.len = 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
//#define POSTURL "http://www.xiami.com/member/login"
#define POSTURL "http://192.168.169.1:10099/reg"
#define POSTFIELDS "username=dsb12&password=1"
#define FILENAME "curlposttest.log"
//解决办法 动态数组 控制buf的大小
typedef struct UserData
{
char* buf;
int len;// alloc
int used; // used length realloc:
}UserData;
/*
UserData* d;
d = (UserData *)malloc(sizeof(UserData));
d->buf=(char*)malloc(1024);
*/
UserData d;
size_t write_data(void* buffer,size_t size,size_t nmemb,void *stream)
{
memcpy(d.buf+d.len, buffer, size*nmemb);
//strcpy(d.buf+d.len, buffer, size*nmemb);
d.len += size*nmemb;
FILE *fptr = (FILE*)stream;
fwrite(buffer,size,nmemb,fptr);
return size*nmemb;
}
int main(int argc,char *argv[])
{
CURL *curl;
CURLcode res;
FILE* fptr;
struct curl_slist *http_header = NULL;
d.buf=(char*)malloc(8192);
if ((fptr = fopen(FILENAME,"w")) == NULL)
{
fprintf(stderr,"fopen file error:%s\n",FILENAME);
return -1;
}
curl = curl_easy_init();
if (!curl)
{
fprintf(stderr,"curl init failed\n");
return -1;
}
curl_easy_setopt(curl,CURLOPT_URL,POSTURL); //url地址
curl_easy_setopt(curl,CURLOPT_POSTFIELDS,POSTFIELDS); //post参数
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write_data); //对返回的数据进行操作的函数地址
curl_easy_setopt(curl,CURLOPT_WRITEDATA,fptr); //这是write_data的第四个参数值
curl_easy_setopt(curl,CURLOPT_POST,1); //设置问非0表示本次操作为post
curl_easy_setopt(curl,CURLOPT_VERBOSE,1); //打印调试信息
curl_easy_setopt(curl,CURLOPT_HEADER,1); //将响应头信息和相应体一起传给write_data
curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1); //设置为非0,响应头信息location
// curl_easy_setopt(curl,CURLOPT_COOKIEFILE,"/Users/zhu/CProjects/curlposttest.cookie");
res = curl_easy_perform(curl);
printf("============");
printf("%d\n",res);
printf("============");
if (res != CURLE_OK)
{
switch(res)
{
case CURLE_UNSUPPORTED_PROTOCOL:
fprintf(stderr,"不支持的协议,由URL的头部指定\n");
case CURLE_COULDNT_CONNECT:
fprintf(stderr,"不能连接到remote主机或者代理\n");
case CURLE_HTTP_RETURNED_ERROR:
fprintf(stderr,"http返回错误\n");
case CURLE_READ_ERROR:
fprintf(stderr,"读本地文件错误\n");
default:
fprintf(stderr,"返回值:%d\n",res);
}
return -1;
}
curl_easy_cleanup(curl);
printf("%s\n",d.buf);
}
这里调用步骤 不是很完善 有一些问题 这里 只是做一个小记 使用方法