解析Content-Type: multipart/form-data格式数据

从Content-Type入手:彻底搞懂axios与后端数据交互的3种格式差异 本文深入解析了axios与后端数据交互时,因Content-Type设置不当导致后端接收不到数据的常见问题。通过对比application/json、application/x-www-form-urlencoded和multipart/form-data三种格式的差异,结合后端注解(如@RequestBody与@RequestParam)的匹配使用,提供了清晰的格式选择指南和实战排查思路,帮助开发者彻底解决参数传递难题。 阅读详情

经常要处理php端发过来的Content-Type: multipart/form-data数据,写两个函数处理下这个数据好。

2014-1-24

发现有个Bug(错误)!!!!


Content-Type: multipart/form-data; boundary=----------------------------aa14712544ce
 
------------------------------aa14712544ce
Content-Disposition: form-data; name="subject"
 
【186期】邂逅青岛,还未离开就想再见
------------------------------aa14712544ce
Content-Disposition: form-data; name="html"
 
Html/78/186soFksp7820130730_f7dJVlDX.html
------------------------------aa14712544ce
Content-Disposition: form-data; name="email"
 
12477511147@qq.com
------------------------------aa14712544ce
Content-Disposition: form-data; name="magid"
 
78
------------------------------aa14712544ce
Content-Disposition: form-data; name="number"
 
186
------------------------------aa14712544ce
Content-Disposition: form-data; name="nick"
 
MyTrip
------------------------------aa14712544ce--


#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char *get_boundary(char *mfd)
{
	char *p, *end;
	char *boundary = NULL;
	int boundary_size;
	
	if ((p = strstr(mfd, "boundary=")) == NULL) {
		return NULL;
	}

	p += 9;
	if ((end = strstr(p, "\r\n")) == NULL) {
		return NULL;
	}
	
	boundary_size = end - p + 1;
	boundary = malloc(boundary_size);

	strncpy(boundary, p, boundary_size);
	boundary[boundary_size - 1] = 0;
	
	return boundary;
}


char* mutipart_form_data(char *mfd, char *boundary, char **name, char **content)
{
	char *p, *end;
	int size;
	int boundary_size;

	*content = *name = NULL;
	if ( (p = strstr(mfd, "name=")) == NULL) {
		return -1;
	}
	p += 6;
	if ((end = strchr(p, '\"')) == NULL) {
		return -1;
	}

	// 获取name
	size = end - p + 1;
	*name = malloc(size);
	strncpy(*name, p, size);
	(*name)[size - 1] = 0;
	
	// 获取内容
	p = end + 1;
	if ((end = strstr(p, boundary)) == NULL) {
		free(*name);
		*name = NULL;
		return -1;
	}

	boundary_size = strlen(boundary);
	mfd = end + boundary_size;

	while(*p == '\r' || *p == '\n') {
		p++;
	}
	
	end -= 3;
	while(*end == '\r' || *end == '\n') {
		end--;
	}

	if (p > end) {
		free(*name);
		*name = NULL;
		return -1;
	}

	size = end - p + 2;
	*content = malloc(size);
	strncpy(*content, p, size);
	(*content)[size - 1] = 0;
	
	if (*(mfd + 1) == '-') {
		// 说明到了最后了
		return NULL;
	}

	return mfd;
}


int main(int argc, char *argv[])
{
	FILE *fp;
	char *f_buf;
	char *boundary;
	size_t f_size;
	fp = fopen(argv[1], "r");

	struct stat f_stat;
	stat(argv[1], &f_stat);
	f_size = f_stat.st_size;
	if (f_size <= 0) {
		printf("fail!!!!!!!\n");
		return 0;
	}
	
	f_buf = malloc(f_stat.st_size + 1);

	fread(f_buf, f_size, 1, fp);
	char *mfd = f_buf;

	
	boundary = get_boundary(f_buf);
	printf("boundary=%s\n", boundary);
	
	while (1) {
		char *name, *content;
		mfd = mutipart_form_data(mfd, boundary, &name, &content);
		if (mfd == -1) {
			break;
		}
                // show 
		printf("name=\"%s\" content=\"%s\"\n", name, content);
		free(name);
		free(content);
		if (mfd == NULL) {
			break;
		}
	}
	
	return 0;
}



全网完美地解决Content type ‘multipart/form-data;boundary=----------0467042;charset=UTF-8‘ not supported)的问题 全网完美解决Content type 'multipart/form-data;boundary=--------------------------036764477110441760467042;charset=UTF-8' not supported 阅读详情

相关推荐

Jmeter:HTTP请求,content-type中的multipart/form-data

总结一下:1、Sampler中勾选Use multipart/form-data复选框来指定当前的content-type为multipart/form-data,而请求头Header Manager中,不要写content-type2、payload中有filename的部分,需要上传文件,在jmeter中的Files Upload中逐一指定参数名称,文件路径及文件类型;

l_q_l的专栏 3122

Content-Type为“multipart/form-data“是什么意思?

axios、multipart/form-data

qq_42931285的博客 1万+

Win系统蓝牙设备频繁卡顿/断连 - 解决方案

无线网卡有2个模块,一个是WiFi,一个是蓝牙,因此蓝牙问题可能和无线网卡有关。在某些情况下,例如高温或WiFi速率过高,会导致蓝牙频繁卡顿/断连。解决方法分为2种,1是更新驱动,2是更换无线网卡。

NSJim的博客 2万+

Content-Type: multipart/form-data; 上传文件

一、postman 模拟Content-Type: multipart/form-data请求头携带Content-Type: multipart/form-data;可以用来上传文件。当然,你也可以不上传文件,上传普通键值对。如下图,使用Postman 模拟提交数据。

weixin_49115633的博客 9650

实战指南:在摩尔线程GPU上部署AI模型的完整流程

本文提供了一份详尽的实战指南,手把手教你如何在摩尔线程GPU上成功部署AI模型。内容涵盖从驱动安装、Docker环境配置,到核心的代码适配与模型运行全流程,并分享了性能调优技巧与常见避坑方法,旨在帮助开发者高效利用国产硬件进行AI应用开发。

weixin_29271263的博客 541

Virtuoso ADE Explorer实战技巧:从基础操作到高级仿真

本文深入解析了Virtuoso ADE Explorer在模拟电路仿真中的核心价值与实战技巧。作为Cadence平台的专业工具,它专为高效、系统化的设计空间探索而生,能大幅提升PVT验证、参数扫描和蒙特卡洛分析的效率。文章从基础界面操作、并行仿真管理,到高级的参数扫描、数据报告生成及蒙特卡洛结果深度剖析,提供了全面的避坑指南与工作流优化建议,帮助工程师从重复劳动中解放,专注于电路设计与性能优化。

ios99的博客 899

Content-Type: multipart/form-data; boundary=${bound} 及Postman请求例子

Content-Type/MediaType/Internet Media Type,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。 1.multipart/form-data 需要在表单中进行文件上传时,就需要使用该格式。 根据Http/1.1 (RFC 2616)的协议规定,我们的请求方式只有OPTIONS、G...

水逆呱的博客 1万+

零信任架构实战:“持续验证+动态授权”全流程解析(附策略引擎联动图)

《零信任实战指南:7图拆解核心流程与行业案例》摘要:本文通过7张架构图系统解析零信任五大核心流程:强身份认证、设备检查、动态授权、持续监控和自动降权。对比金融(重数据审计)与制造业(重物理绑定)的落地差异,指出三大常见误区及解决方案。数据显示,零信任可使安全响应提速60%,泄露成本降低45%。文章提供6个月实施路线图,强调零信任是"智能信任"体系,建议企业分阶段改造,优先保护核心系统。附赠金融/制造行业策略模板及甘特图示例。(149字)

sara_han的博客 773

Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported“【已解决】

HTTP请求的Content-Type

嘻嘻哈哈学技术 7万+

mtk-drm commit送显流程(二):内核态atomic_commit实现解析

本文深入解析了mtk-drm框架中atomic_commit机制的内核态实现流程,详细介绍了从用户态触发到硬件提交的完整调用链,包括状态检查、硬件提交等关键阶段。特别分析了MTK平台在动态刷新率、内存带宽优化等方面的特有实现策略,为开发者提供了调试技巧和常见问题解决方案。

weixin_30839881的博客 1305

NLP高频面试题(一)——Transformer的基本结构、作用和代码实现

本文详细介绍了Transformer模型的基本结构和PyTorch代码实现过程。首先解析了Transformer的核心组成部分,包括嵌入层、多头自注意力机制、位置编码、前馈神经网络、编码器和解码器等模块,并通过清晰的代码示例逐步展示了如何在PyTorch中构建完整的Transformer模型。文末提供了一个可运行的简单示例,帮助读者快速理解并实践Transformer的核心原理与实现方法。

WeLearnNLP 1026

Content type ‘applicationx-www-form-urlencoded;charset=UTF-8‘ not supported“【已解决】

如果一个请求被设置为method=-post’,并且请求的header设置为Content-Iypeasppicationpeww-fom-urlencoded或者Content-ypemuliartfom-data,那么测览器就会以RequestPayioad来显示你的请求体,所以基本数据格式为键值对,如果没有特别声明,appiationl/son是Asios默认的Content-ype,也是我最常用的一种,它声明了请求体中的数据将会以json字符串的形式发送到后端。...

m0_67401153的博客 5139

TC3XX - MCAL知识点(十三):IOM EB-tresos配置说明及代码浅析

输入输出监视器(IOM)驱动程序作为比较单元,检查系统外设输出的正确操作,这些输出可以作为监视功能的输入。监控功能需要通过配置IOM硬件来实现。它向SMU生成全局系统事件。IOM驱动程序初始化并控制微控制器的IOM单元。驱动程序还为用户提供初始化和设置IOM内部单元的阈值的服务。它还应该提供重置IOM内核的服务。应该提供该服务来组合单个或多个本地事件,以生成单个全局系统事件。IOM驱动程序严重依赖于初始化和配置。软硬件关系如下图缩写解释LAM逻辑分析模块ECM事件组合模块FPC。

梦想技术家 1799

常见的ajax请求头Content-Type

Content-Type指定参数的常见格式:form-data、x-www-form-urlencoded、application/json、json。content-type的取值是告诉服务端,你传递过去的内容是啥,你应该准备好如何接收。 一、application/x-www-form-urlencoded 是Ajax默认的请求类型,浏览器的原生 form 表单,如果不设置 enctype 属...

weixin_45310445的博客 1710

爬虫面试:关于爬虫破解验证码的13个经典面试题

​解释:验证码是一种用于区分人类用户和自动化程序(如爬虫)的技术,通常通过显示图形、文字或音频等方式,要求用户完成特定任务(如识别扭曲的字母、点击特定区域等)。​作用:防止恶意爬虫滥用网站资源、进行批量注册、登录破解等行为,保护网站的安全性和数据的完整性。

数据知道的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Content-Type 请求头

Content-Type是HTTP请求头的一个重要字段,它告诉服务器客户端发送的数据是什么格式。在前后端通信中,这非常关键。

2302_80742310的博客 438

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

HTTP Content-Type 到底是什么意思?

Content-Type 用来说明请求体 Body 的格式。有 JSON Body,用 application/json。有普通表单 Body,用 application/x-www-form-urlencoded。有文件上传,用 multipart/form-data。没有 Body,通常不需要 Content-Type。Content-Type 是“我发给你的是什么”。Accept 是“我希望你返回什么”。不用请求体,也不用 Content-Type。

Dejong22的博客 334

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

x-www-form-urlencoded,form-data,raw 表单请求格式的区别

引言:在项目中通常使用application/json的方式去与后端联调,有天,后端忽然使用了x-www-form-urlencoded的方式,由于之前一直没有使用过,所以在这里对比下这几种方式的核心区别。格式:数据被分割成多个“部分”(Part),每个部分用随机生成的边界分隔符(Boundary)隔开,每个 Part 内部可自带独立的 Content-Type(如 image/png)。格式:键值对,用 & 连接,= 分隔,且会对特殊字符进行 URL 编码(如空格变 %20)。简单快捷,浏览器原生支持。

u013994400的博客 355

前后端数据传参详解

1. Http数据传参的两种方式 uri传参 数据参数写在uri地址中,可以为查询参数,也可以为路径参数,一般get请求方式用的多。 优点:一个TCP传输就可以将参数传递给服务器,速度快。 缺点:参数直接暴露在浏览器中,不安全。 body传参 数据参数写在body体中,有多种格式:json、xml、form-data,一般post请求方式用的多。 优点:相对安全,没有大小限制。 缺点:需要两个T...

JustKian的博客 9803

前端最常用的两种请求数据格式application/json 和 multipart/form-data 完全解析

摘要:前端开发中,application/json和multipart/form-data是两种核心请求格式。json适用于普通数据传输(如登录、增删改查),结构清晰、传输快,但不能传文件;form-data专用于文件上传(如图片、视频),需使用FormData对象,浏览器会自动处理Content-Type。关键区别在于:json传输JSON字符串,form-data采用分段传输;json不能传文件,form-data可同时传文件和普通数据。使用时需注意:上传文件必须用form-data且不手动设置Cont

weixin_45063953的博客 420

HTML地址栏传数据和json区别,前端利用formData格式进行数据上传,前端formData 传值 和 json传值的区别?...

contentType 常见的格式text/plain :纯文本格式application/json: JSON数据格式application/x-www-form-urlencoded 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格一....

weixin_39972019的博客 448

FORM对象与 POST 请求 Body 的关系

是从 POST 请求的 body 中解析出来的结构化数据对象。 维度 POST 请求 Body request.form 对象 物理形态 原始字符串或字节流 Python 对象(ImmutableMultiDict) 数据格式 URL 编码字符串 / Multipart 格式 结构化的键值对 可见性 可直接访问() 必须通过 Flask 解析后访问 可操作性

m0_46322965的博客 529

php接收post图片,原生PHP接收$_POST的几种方式

> HTTP 常见 Content-Type> application/x-www-form-urlencoded> multipart/form-data> application/json> $_POST 默认只能接收到 Content-Type: application/x-www-form-urlencoded 的数据> 如果Content-Type: ...

weixin_34092535的博客 1009

HttpRequest中几种常见的ContentType

1.application/x-www-form-urlencoded (1)不属于http content-type规范,通常用于浏览器表单提交,数据组织格式:name1=value1&name2=value2,POSTt时会放入http body,GET时,显示在在地址栏。最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就...

qq_37266528的博客 2464

php post 请求字节,php复习一下四种常见的POST提交数据方式

HTTP协议是以ASCII码传输,建立在TCP/IP协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式Content-Type。服务端根据请求头(headers)中的Content-Type字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析...

weixin_35860326的博客 518
上一篇: c++单线程可变大小内存管理器代码 from 提高c++性能的编程技术
下一篇: Leveldb使用小例
smallmelon
博客等级 码龄16年 22粉丝 50原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值