专栏首页Pou光明Http Post 快速使用

Http Post 快速使用

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~

一直对http很陌生,这次借助libcurl分享一个快速使用http post的案例。

平台:ubuntu16.04

一、libcurl的安装

1. Git上下载 master最新代码

https://github.com/curl/curl.git

我是下载的Zip包,git clone有点慢

2. 编译只有configure.ac文件和Makefile.am文件的工程

源码包还可以用cmake编,但是我失败了;所以用的传统./configure方式。

张宇说,没有条件创造条件,所以构造configure文件。

libtoolize
aclocal
autoheader
autoconf
automake --add-missing

这个流程亲测可用!可以写个脚本文件,以后直接用就行。注意缺什么安什么就行了。

3. 配置configure参数

./configure --prefix=/opt/libcurl --without-ssl

不使用ssl;设置安装路径为/opt/libcurl,方便以后移除。

4. 传统技能

make

sudo make install

二、使用Python搭建http server

Libcurl是有例子的,在/curl-master/docs/examples下。显然我没有仔细看,直接在网上搜别人怎么用的,然后没用明白,悲伤。

没有一个server,太难测试了,而搭建server又太难,恰好python解决了这个棘手的问题。只需6行就可以完美解决。

from bottle import route, request, run 

@route('/hello', method=['GET', 'POST']) 
def dh():      
      return 'hello ' + request.query.str 


if __name__ == "__main__": 
      run(host='0.0.0.0',  port=8080,  reloader=True)

需要安装python bottle 才可以运行,步骤如下:

sudo apt install python-pip

python2 -m pip install bottle

注:使用的是python2测试的

运行效果如下:

三、libcurl Post例子

libcurl 的Post功能只是它众多功能中的一个,其他的我用不到,就不介绍了。

使用cmake构建的工程,主测试程序如下:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>

#include "curl.h"

int httpPost( uint8_t * strPost, uint32_t msg_size)
{
    FILE *fpBody = NULL;
    FILE *fpHeadData = NULL;

    if ((fpBody = fopen("BodyData", "w")) == NULL)  // 返回body用文件存储
        return -1;
    if ((fpHeadData = fopen("HeaderData", "w")) == NULL)  // 返回head用文件存储
        return -1;

    CURLcode ret;  
    struct curl_slist *headers=NULL; 
    CURL* curl = curl_easy_init();  
    if(NULL == curl)  
    {  
        return CURLE_FAILED_INIT;  
    } 


    curl_easy_setopt(curl, CURLOPT_POST, 1);  //设置为post方式

//设置内容类型,可以设置为json,本次测试未使用   
 // headers = curl_slist_append(headers, "Content-Type: application/octet-stream");

    curl_easy_setopt(curl, CURLOPT_URL,"http://127.0.0.1:8080/hello?str=world");; //设置URL
    //curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); // 改协议头
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strPost);  //设置post buf
    curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, msg_size); //设置buf大小,上次就是被坑在这里了


    curl_easy_setopt(curl, CURLOPT_WRITEDATA, fpBody); //将返回的bosy数据输出到fp指向的文件
    curl_easy_setopt(curl, CURLOPT_HEADERDATA, fpHeadData); // 将返回的http头输出到fp指向的文件

    curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);  
    curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);  //超时时间为3秒
    curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3); 

    ret = curl_easy_perform(curl);  //执行
    curl_easy_cleanup(curl);      //释放资源

    curl_slist_free_all(headers);   //释放资源

    if(ret != CURLE_OK) 
    {
      fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(ret));
    }

    return ret; 
}

int main()
{
    uint8_t postData[] = "postContent"; // 未使用

    httpPost( postData, strlen(postData));
    return 0;
}

说下流程:

现在我也不是很懂这些流程,按照相应的格式设置,能和对方server通信即可。

Server说明如下:

①请求类型Http Post

②Http Content-Type: application/octet-stream

效果如下:

四、总结

如何快速使用别人的库。

生活挺像数学的:已知条件就是你的当下,要你解的却是未来的你。

你说谁能知道未来的自己会是什么样?但是有人数学分就是比你高。

由现在是可以大概知道未来的自己会是什么样的~ ~ ~

本文分享自微信公众号 - Pou光明(pou0230),作者:PouG

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Python进行http POST请

    py3study
  • 使用Python POST任意的HTTP

    第一次 open() 是进行登录. 服务器返回的 Cookie 被自动保存在 cookies 中, 被用在后来的请求.

    py3study
  • 使用OkHttp发送POST请求的快速入门指南

    在本篇简短的技术文章中,我们将特别介绍 OkHttp 3.x 版本中发送Post请求的不同方式。

    明明如月学长
  • HTTP协议中PUT和POST使用区别

    有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源;有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源;还有的观点认为可以用PU...

    Fundebug
  • 使用Java程序通过http post访问Application server

    Created by Jerry Wang, last modified on Aug 20, 2014 source code如下:

    Jerry Wang
  • iView快速使用

    在 webpack 入口页面 main.js 中如下配置(Vue模板中的main.js):

    Coxhuang
  • Qml 快速使用

    这周简单的了解了下Qt的qml。个人对它的定位就是可以方便快速地绘制一些精美的UI,对快速开发前端(UI)还是有挺大帮助的。所以并没有从整体上了解,而是快速的组...

    用户5908113
  • HiveQL快速使用

    --define可以定义用户变量 --hivevar可以定义用户遍历 --hiveconf使用key-value得到hive-site.xml配值的变量

    黑白格
  • 快速入门Http协议

    剽悍一小兔
  • 快速了解HTTP协议

    HTTP是Hyper Text Transfer Protocol的缩写,该协议是用于从万维网服务器传输超文本到本地浏览器的传送协议,且它是基于TCP/IP通信...

    玖柒的小窝
  • QQ蠕虫的行为检测方法

    作者 Nandisec 选题背景 QQ蠕虫是一种利用QQ等腾讯公司相关产品进行传播的一种特殊蠕虫,该蠕虫的基本原理是利用了QQ帐户的快速登录机制,只要当前...

    FB客服
  • 使用ApiPost模拟发送get、post、delete、put等http请求

    现在的模拟发送请求插件很多比如老外的postman等,但亲测咱们国内的 ApiPost 更好用一些,因为它不仅可以模拟发送get、post、delete、put...

    骑马的少年
  • 使用Java代码向SAP ABAP Netweaver发送HTTP post请求

    Jerry Wang
  • 前后端数据交互(八)——请求方法 GET 和 POST 区别

    WEB 开发同学一看 get 和 post 请求方法的区别,第一感觉都是 So easy!

    呆呆
  • GitHub CLI 命令行工具使用

    GitHub 被巨软收购以后推出了一系列非常好用的开发者工具,今天我们要为大家介绍的是近来 GitHub 发布的又一个非常有用的工具: GitHub CLI,可...

    我是阳明
  • 物联网时代-跟着Thingsboard学IOT架构-HTTP设备协议及API相关限制

    thingsboard GitHub: https://github.com/thingsboard/thingsboard

    sanshengshui
  • 使用 Postman 与 Kotlin 交互REST API接口数据 顶

    在前面2篇文章使用 Kotlin 和Spring Boot 2.0快速开发REST API接口和使用 Kotlin 和Spring Boot 2.0快速开发RE...

    Michael Chen
  • autoconf/automake最快速使用

    automake工具会根据config.in中的参量把Makefile.am转换成Makefile.in文件。在使用Automake之前,要先手动建立Makef...

    十毛
  • SpringMVC快速使用AOP

    最近突然想到了AOP编程,于是在自己的SpringMVC小项目中引入了。AOP一般用来做些什么呢?这里简单的使用AOP做拦截日志,来介绍下在SpringMVC中...

    幽鸿

扫码关注云+社区

领取腾讯云代金券