C 语言Socket 实现http 带参数的POST请求

2023-05-16

    本文叙述C语言中结合socket 如何实现http POST请求,对于http协议相关内容可以查看HTTP协议详解。对于不带参数的post请求,只需要按照http格式发送即可。下面以带参数的POST请求为例。

1. C 语言Socket 实现带参数的 http post请求

     C语言中可以使用snprintf 、strcat 等函数将字符串数据(http头和参数数据)按照http协议格式保存在buf中,再调用socket send函数发送buf的内容。

     现有API接口: http://ABC.com:1234/rest/Prd/S_Prd_Devices/
              POST请求, 参数:String macAddr, mac地址(长度为12);String pass,客户端验证字符串(长度为16);
       返回:{“success”:true}

                具体实现:

         //str_mac、str_pass分别为参数字符串

        // total_len  为参数数据的长度,参数数据发送时格式为mac=参数1&pass=参数2

        int total_len = strlen(str_pass) +strlen(str_mac)+strlen("mac=")+strlen("&pass=");

        int len;

         unsigned char buf[256];
        memset(buf, 0, 256);

        snprintf(buf,sizeof(buf)-1,
        "POST /rest/Prd/S_Prd_Devices/ HTTP/1.1\n"
        "Host: ABC.com:1234\n"
        "Content-Type: application/x-www-form-urlencoded\n"
        "Content-Length: %d\r\n"
        "\r\n"
        "mac=%s&pass=%s",
        total_len,
        str_mac,
        str_pass
        );

       len = strlen(buf);
      printf("\nsendata:%s\n",buf);
       sock_writen(fd, buf, len);
       
说明:发送的参数数据(即total_len)长度必须为准确的参数长度,否则服务器不知道接受多少数据


2  格式说明

结合上述的post 实例,简单说明http 格式:

POST - 请求方法,向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。注意,GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中。

HTTP/1.1 :协议支持版本为1.1。

Host:请求域名。

Content-Type:用来表明request的表明类型。

Content-Length:表示请求消息正文的长度。例如:Content-Length: 38。对于带参数的post请求,该值为参数的长度。

3.状态码

有5种可能的值,如下表所示。

状态码

定义

说明

1XX

信息

接收到请求,继续处理

2XX

成功

操作成功地收到,理解和接受

3XX

重定向

为了完成请求,必须采取进一步措施

4XX

客户端错误

请求的语法有错误或不能完全被满足。

5XX

服务器端错误

服务器无法完成明显有效的请求。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 语言Socket 实现http 带参数的POST请求 的相关文章

  • 一个简单的爬虫程序,爬取网站的图片

    最简单的爬虫是分析网页 xff0c 如果要爬取图片 xff0c 就要将图片在网页中的格式进行分析 xff0c 取到图片的连接 xff0c 接着下载图片 xff1b 由于网页中还会链接到其他的网页 xff0c 所以需要将其中的所有网页取出 x
  • python文件操作及引申的代码行数统计

    文件操作一般包括文件的读写 xff0c 文件夹的创建 xff0c 文件夹的删除等 第一部分 xff1a python文件读写的基本操作 python打开文件一般使用 open函数 xff1a open file mode 61 39 r 3
  • 超声波测距仪

    基本原理 超声波是利用反射的原理测量距离的 xff0c 被测距离一端为超声波传感器 xff0c 另一端必须有能反射超声波的物体 测量距离时 xff0c 将超声波传感器对准反射物发射超声波 xff0c 并开始计时 xff0c 超声波在空气中传
  • Authorization 值中Bearer空格加token值在python接口请求中如何实现

    在项目中每个接口请求都需要Authorization 值 xff0c 而Authorization他的值必须 Bearer 加token值 xff0c 刚开始自己忘记添加Bearer 接口请求一直拒绝访问 xff0c 后来用fiddler抓
  • printf格式化字符串漏洞原理解析

    读任意地址 printf 34 x 34 只给格式化字符串 xff0c 而不给参数 xff0c 会导致内存泄漏从而读到内存中其他地址的数据 N x参数可以以16进制方式打印第N个参数的内容 xff0c 通过修改N xff0c 我们可以遍历栈
  • 教程丨利用微软官方工具制作U盘安装Win10系统

    一 制作Win10安装U盘 1 登录网站 https www microsoft com zh cn software download windows10 下载 MediaCreationTool 工具 xff0c 这里我们直接点击 立即
  • Linux常用命令大全

    发布jar包 nohup java jar xxxx jar gt dev null 2 gt amp 1 amp 修改nginx conf 后刷新配置 usr local nginx sbin nginx t 测试配置文件修改是否正常 u
  • Zab协议详解

    什么是Zab协议 xff1f Zab协议 的全称是 Zookeeper Atomic Broadcast xff08 Zookeeper原子广播 xff09 Zookeeper 是通过 Zab 协议来保证分布式事务的最终一致性 Zab协议是
  • 谷歌浏览器安装json格式化插件

    实际开发工作中经常用到json数据 xff0c 那么就会有这样一个需求 xff1a 在谷歌浏览器中访问URL地址返回的json数据能否按照json格式展现出来 比如 xff0c 在谷歌浏览器中访问 xff1a http jsonview c
  • Seata详解(一)

    分布式事务 事务是数据库的概念 xff0c 数据库事务 xff08 ACID xff1a 原子性 一致性 隔离性和持久性 xff09 xff1b 分布式事务的产生 xff0c 是由于数据库的拆分和分布式架构 微服务 带来的 xff0c 在常
  • RocketMQ的事务消息和改造

    什么是 rmq分布式事务消息 xff1f Apache RocketMQ在4 3 0版中已经支持分布式事务消息 xff0c 这里RocketMQ采用了2PC的思想来实现了提交事务消息 xff0c 同时增加一个补偿逻辑来处理二阶段超时或者失败
  • session和token区别

    一 session的状态保持及弊端 xff08 1 xff09 当用户第1次通过浏览器使用用户名和密码访问服务器时 xff0c 服务器对用户名和密码进行验证 xff08 2 xff09 验证成功后 xff0c 在服务器端生成并保存sessi
  • 关于阿里云对RocketMQ的topic,tag,consumer关系的理解

    什么是订阅关系一致 消息队列RocketMQ版 阿里云帮助中心 RocketMQ 中Topic Tag GroupName基本概念介绍 Young丶的博客 CSDN博客 rocketmq topic和group的区别 转载
  • MySql Workbench 8.0汉化插件分享

    打开workbench的安装数据目录 xff0c 路径是 xff1a C Program Files MySQL MySQL Workbench 8 0 CE data 打开以后 xff0c 可以看到下面有一堆的xml结尾的文件 xff0c
  • Java-Jdk12版本下载后没有Jre的解决方案以及配置环境变量

    新本Jdk12版本下载后不像以前的版本会自动生成Jre文件夹 xff0c 通过dos命令行可以解决 1 下载jdk12 网址 xff1a https www oracle com technetwork java javase downlo
  • android--性能优化1--首屏优化&启动速度与执行效率检测

    文章目录 实战篇traceview 工具使用操作步骤操作步骤2 systrace 工具使用操作步骤 AOP 工具 hugo 的使用使用方法效果 BlockCanary 使用AOP 工具使用 AspectJ操作步骤 优化方案 异步线程优化 针
  • error Failed connect to github.com 443原因 Github更换认证方式

    Github更换认证方式 github近期调整了认证方式 xff0c 不再允许第三方工具基于账号密码来访问和管理项目了 除非使用github DeskTop 自带的客户端 好坑啊 我一直再用android studio 自带的提交工具很方便
  • AppCompatRatingBar备份用 下次拷贝直接用自定义图片背景

    控件 lt androidx appcompat widget AppCompatRatingBar android id 61 34 64 43 id rating bar 34 style 61 34 64 style myRating
  • 备份Edittext编辑框字数限制ui以及逻辑

    ui布局 etContent addTextChangedListener new TextWatcher 记录输入的字数 private CharSequence enterWords private int selectionStart
  • android—性能优化2—内存优化

    文章目录 性能优化 工具 memory profilerLeakCanaryarthookepic 库 java内存管理机制java 内存回收机制Android内存管理机制Dalvik与 Art区别Low Memory Killer 内存抖

随机推荐

  • glide4.11.0封装gfilib优化gif图片加载

    文章目录 具体步骤 下载giflib 和 framesequence导入并集成 giflib 和 framesequenceglide的配置gif使用giflib集成开始使用加载思路创建自定义GifDrawable 需求 目前项目中加载进度
  • java筑基.泛型,反射,注解-利用注解加反射练习

    文章目录 泛型 泛型类泛型方法泛型接口子类明确泛型类的类型参数变量子类不明确泛型类的类型参数变量 限定类型变量通配符泛型 注解元注解注解的应用场景 反射 注解 43 反射练习 泛型 把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特
  • android性能优化实践与总结(包含启动,内存优化)

    应用中性能优化实践与总结 精心总结 任何优化都需要进行检测 以数据说话 优化前和优化后有了怎样的提升 TOC 启动优化 检测启动时间 检测工具任选其一 hugo 插件 自己定义时间开始和结束手动计算时间 AOP 工具 AspectJ adb
  • android—性能优化3—网络优化

    文章目录 网络优化正确的认识流量消耗网络优化维度其他网络请求误区 网络优化工具选择Network Proifiler抓包工具stetho流量优化如何判断APP流量消耗偏高如何测试 测试方案 线上线下流量获取线上流量获取方案NetworkSt
  • java 实现死锁

    资源抢占 导致死锁 public static void main String args final Object a 61 new Object final Object b 61 new Object Thread threadA 6
  • cameraX视频录制 拷贝直接用

    文章目录 效果图activity代码项目地址 最下面是GIT 地址 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img 3i0EaImv 1637722081187 https liudao01 github io
  • android studio maven 拉取代码出现 bad gateway 502

    一般都是gradle 配置的maven的仓库 问题 我这里是因为使用了 repositories google jcenter mavenCentral 新增 maven url 39 https www jitpack io 39 mav
  • android studio使用 maven push 插件上传私有maven - 已成功使用到项目中

    gradle 任务 下面是放在gradle 配置里面 比如 我的项目model 是 apm 那么 就把下面的代码放到 apm的 gradle 下面 plugins id 39 com android library 39 id 39 kot
  • 工作的三个层次,什么样的工作堪称自由

    工作的三个层次 xff0c 什么样的工作堪称自由 先说结论 只有工作的技艺人才是自由的 前段时间经常喜欢看建造类的视频 一个澳洲小哥 只用最原始的器械徒手打造东西 比如空手打造石斧 空手打造钻木取火套装等等 这类视频很有意思 我就特别爱看
  • android 创建Model 解决无法依赖传递问题 , 实现 sdk 依赖关系的传递

    介绍 我现在创建了一个应用A 一个库工程 B B 远程依赖了库工程C A远程依赖B工程 B 是通过Maven 发布成远程依赖库 B 作为一个通用的库工程 发布到了Maven上 就可以比较简单的被各个项目引入 如下图 问题 目前存在一个问题
  • 2021总结. 2022展望

    2021 收获了许多 技能上 学习了多个技能 自由泳自由倒立复刻拳王梅威瑟的跳绳训练单板滑雪 总结 技能上尽量是身体力行的 自从看过 囚徒健身 后 被作者的自传所影响 希望成为想他那样的人 认知上 认知上也有了提升 读了许多书 今年比较喜欢
  • 仿照爱时间app写的时钟 自定义view

    MyClockView MyClockView 仿照 爱时间app 写的自定义时间控件 爱时间的 控件 我写的控件 可以看到我写的在指针 刻度上面 是比他要精细一些的 后面的点击事件 还有中间文字的绘制 都是一些套路 我的时间也不够多 就不
  • dagger2简单使用与理解笔记

    文章目录 使用dagger2好处具体案例查看github 1 使用dagger2注入基本使用流程概念 2 dagger2中各种注解基本使用引入dagger20 写两个对象 用来实际操作的1 写module类 注解Module Provide
  • electron调用dll文件

    Electron 对系统层能力的使用可能比较弱 xff0c 此时需要求助 Python C 43 43 C 等语言 xff0c 通过 ffi napi 库可以让 Node js 使用 C 43 43 dll xff0c 通过 electro
  • 动态库和静态库的区别

    什么是库文件 一般来说 一个程序 通常都会包含目标文件和若干个库文件 经过汇编得到的目标文件再经过和库文件的链接 就能构成可执行文件 库文件像是一个代码仓库或代码组件的集合 为目标文件提供可直接使用的变量 函数 类等 库文件包含了静态链接库
  • reactor/proactor模型简介

    Reactor和preactor都是IO多路复用模式 xff0c 一般地 I O多路复用机制都依赖于一个事件多路分离器 Event Demultiplexer 分离器对象可将来自事件源的I O事件分离出来 xff0c 并分发到对应的read
  • c语言中的带参宏定义

    C语言允许宏带有参数 在宏定义中的参数称为形式参数 xff0c 在宏调用中的参数称为实际参数 xff0c 这点和函数有些类似 对带参数的宏 xff0c 宏展开和用实参替代形参 xff0c 发生在预处理阶段 示例1 xff1a define
  • ZCU102 Zynq MPSoC IP设置与说明

    目录 1 前言2 设置与说明2 1 PS UltraScale 43 Block Design2 2 I O Configuration2 2 1 Bank0 3电压 xff1a 2 2 2 Low SpeedQSPISD卡CANI2CPM
  • ROS下使用激光雷达RPLIDAR-A2进行SLAM完成地图的构建

    想要进行一个完整的地图建立离不开以下几个模块 xff1a 1 坐标 2 激光数据 3 绘图算法 ROS工程可以从我的GitHub上面下载 xff1a https github com LJianlin ROS SLAM Gmapping 下
  • C 语言Socket 实现http 带参数的POST请求

    本文叙述C语言中结合socket 如何实现http POST请求 xff0c 对于http协议相关内容可以查看HTTP协议详解 对于不带参数的post请求 xff0c 只需要按照http格式发送即可 下面以带参数的POST请求为例 1 C