余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

C语言发送post请求数据程序(c语言发送http请求)

xiyangw 2022-11-24 16:37 17 浏览 0 评论

C语言发post请求数据程序, 工作需要,网上查资料N篇,作为半路出家学编程的,走过了N个坑,终于完成以下的测试程序。

使用了curl的库, 这样无论在windows或者在linux都可以使用.

C语言发送post请求数据程序(c语言发送http请求)

win下的编程环境是TDM-GCC-64, 怎样安装,也是另一个话题。需要这个的请自行上网查询怎样安装.

linux 下是gcc环境,最好先安装curl开发包,目的就是需要curl.h等文件, 怎样安装,也是另一个话题。

废话不说,以下是正式程序.

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <curl/curl.h>

struct string {

char *ptr;

size_t len;

};


void init_string(struct string *s) {

s->len = 0;

s->ptr = malloc(s->len + 1);

if (s->ptr == NULL) {

fprintf(stderr, "malloc() failed\n");

exit(EXIT_FAILURE);

}

s->ptr[0] = '\0';

}

size_t writefunc(void *ptr, size_t size, size_t nmemb, struct string *s)

{

size_t new_len = s->len + size * nmemb;

s->ptr = realloc(s->ptr, new_len + 1);

if (s->ptr == NULL) {

fprintf(stderr, "realloc() failed\n");

exit(EXIT_FAILURE);

}

memcpy(s->ptr + s->len, ptr, size*nmemb);

s->ptr[new_len] = '\0';

s->len = new_len;


return size * nmemb;

}

CURLcode curl_post_req(char *url, char *postParams,struct curl_slist *headers, char *response)

{

CURL *curl;

curl = curl_easy_init(); //初始化

// curl返回值

CURLcode res;

if (curl)

{

struct string s;

init_string(&s);

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);


//curl_easy_setopt(curl, CURLOPT_URL, "http://httpbin.org/post");

curl_easy_setopt(curl, CURLOPT_URL, url);

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc);

curl_easy_setopt(curl, CURLOPT_WRITEDATA, &s);

curl_easy_setopt(curl, CURLOPT_POST, 1);//设置CURLOPT_POST之后必须带有POST数据

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postParams);

//不接收响应头数据0代表不接收 1代表接收

curl_easy_setopt(curl, CURLOPT_HEADER, 0);

curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);

//CURLOPT_VERBOSE的值为1时,会显示详细的调试信息

curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);

curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);

curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);


//设置超时时间,以秒来计算 CURLOPT_CONNECTTIMEOUT是连接超时

curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);

curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);

// https ssl 时需要用到,如果是 http 可以注释掉

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);


res = curl_easy_perform(curl);

//printf(" =>%s=>=>\n", s.ptr);

sprintf(response," =>%s\n", s.ptr);


free(s.ptr);

curl_slist_free_all(headers);


};

curl_easy_cleanup(curl);

return res;

}

int main(int argc, const char *argv[])

{

// http 请求头, 构造

printf(" start...\n");

struct curl_slist *headers1 = NULL;

headers1 = curl_slist_append(headers1, "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko");


headers1 = curl_slist_append(headers1, "Content-Type:application/x-www-form-urlencoded; charset=UTF-8");

char url_post0[100] = "https://www.lpfrx.com/";


// 查找的字符串 : delphi

char paramsLogin0[100] = "s=delphi";

char resPost0[40960] = "";


CURLcode res3 = curl_post_req(url_post0, paramsLogin0, headers1,resPost0);

if (res3 == CURLE_OK)

{

printf("data: %s" ,resPost0);

}

printf(" end...\n");

return 0;

}

// win 下cmd下运行乱码,请先执行 chcp 65001 转成 utf8. 默认是chcp 936

// win: 运行目录下需要zlib.dll libcurl.dll

// curl-Library 是我自己的目录,放在当前的程序目录下,win下的curl.h 也是需要自己去找,如果有python编程环境的话,也安装了curl库的话,应该可能会有curl.h的库路径

// win: gcc -o curlpostlpfrx curlpost_lpfrx.c -I ./curl-Library/include -L ./curl-Library/lib -lcurl

//linux: gcc -o curlpostlpfrx curlpost_lpfrx.c -lcurl

相关推荐

为初学者学习JavaScript的重要提示(为初学者学习JavaScript的重要提示)
为初学者学习JavaScript的重要提示(为初学者学习JavaScript的重要提示)

所以,如果你已经阅读了这篇文章来到这里,你可能已经非常了解从初学者的JavaScript开始。然而,从编写新手到编码器的过程是漫长,艰难和艰苦的-相信我!幸...

2023-03-21 18:37 xiyangw

《JavaScript基础教程(第8版)》电子书,建议保存下来
《JavaScript基础教程(第8版)》电子书,建议保存下来

书籍简介JavaScript基础教程(第8版)作者:[美]TomNegrino/[美]DoriSmith出版社:人民邮电出版社副标题:第8版原...

2023-03-21 18:37 xiyangw

初学者如何学习编写网页和JavaScript语言(做网页的编程语言)
初学者如何学习编写网页和JavaScript语言(做网页的编程语言)

菜农认为如果你有学过C语言,那么JS根本不是事情。JS是嵌入到网页里不能单独运行的,故还要学习一些html语言,即网页的“界面”,这样在任意浏览器上你编写的ht...

2023-03-21 18:37 xiyangw

js入门记录(js入门书)

jsBrendan(布兰登)Eich轻量级的编程语言(ECMAscript5或6),是一种解释性脚本语言(代码不进行预编译),主要用来向HTML页面添加交互行为,目前是互联网上最流行的脚本语言,支持...

JS入门(JS入门安卓)

********JavaScript概述************ECMAScript和JavaScript的关系****1996年11月,JavaScript的创造者--Netscape公司,决定将J...

web前端开发中必会JavaScript属性和常用方法
web前端开发中必会JavaScript属性和常用方法

Web前端入门到精通必会JS的属性和常用方法,应同学留言要求,今天抽时间整理总结了Web前端实际开发中必会的变量、基本数据类型、表达式与操作符、流程控制语句、数...

2023-03-21 18:36 xiyangw

D3.js入门教程(d3.js书籍)
D3.js入门教程(d3.js书籍)

作者:karen转发链接:https://mp.weixin.qq.com/s/TFpywiD6PY7HMlKIpQwDFQWHATD3.js是一个JavaSc...

2023-03-21 18:36 xiyangw

JavaScript—Promise 入门(:javascript)
JavaScript—Promise 入门(:javascript)

Promise在中文中被表示成“期约”,下文均用原词Promise很多时候请求在程序中或网页上进行操作,但请求的结果不能立即用于进一步处理。在这种情况下,操作...

2023-03-21 18:35 xiyangw

Javascript入门 001(javascript 菜鸟教程)
Javascript入门 001(javascript 菜鸟教程)

javascript是一种基于对象和事件驱动的,并具有安全性能的,是一种轻量级的脚步语言,能减轻服务器压力和实现页面动态效果javascript有ECMASC...

2023-03-21 18:35 xiyangw

初学JavaScript之简介(javascript如何学)

JavaScript是开发WEB而闻名的脚本语言。JavaScript可以直接插入HTML代码中,由浏览器来执行。Javascript可以在网页上实现复杂的功能,例如实时的内容更新,交互式的地图,2D...

JavaScript基础知识及写法(javascript 菜鸟教程)
JavaScript基础知识及写法(javascript 菜鸟教程)

JavaScript基础概念JS的组成:1.ECMAScript:Js语法2.DOM:文档对象模型,文档:html文档,操作html文档(操作html文...

2023-03-21 18:34 xiyangw

海口达内:初学者学JavaScript 5个小技巧,实用
海口达内:初学者学JavaScript 5个小技巧,实用

我们都知道JavaScript因为与绝大多数浏览器都兼容,可以在这些浏览器中使用它。又因为JavaScript的简单,所以使用范围相当广泛。许多程序员过去常常认...

2023-03-21 18:33 xiyangw

一本涵盖Web前后端全栈开发的JavaScript入门教程
一本涵盖Web前后端全栈开发的JavaScript入门教程

在如今种类众多的编程语言中,JavaScript是一个非常特殊的存在。如果从语言设计的角度来分析,JavaScript应该被归类为基于原型的、解释型的高级编程语...

2023-03-21 18:32 xiyangw

JavaScript 简单使用,从入门开始(javascript可直接在电脑上使用)
JavaScript 简单使用,从入门开始(javascript可直接在电脑上使用)

HTML中的脚本必须位于<script>与</script>标签之间。脚本可被放置在HTML页面的<body>...

2023-03-21 18:32 xiyangw

初学者怎样学习 JS 更有效?六个方法供你参考
初学者怎样学习 JS 更有效?六个方法供你参考

1024程序员节,推荐一些前端开发工程师必读书籍本文已经作者DmitriPavlutin授权翻译!当你决定学习JS是有可能是因为你想成为一个前端或后端...

2023-03-21 18:32 xiyangw

取消回复欢迎 发表评论: