socket封装HTTP请求

之前写过两个socket封装的HTTP GET请求,可是知其然,不知所以然。这次写POST请求就有点懵逼了。

还是从大佬的文章出发:https://blog.csdn.net/a19881029/article/details/14002273

请求的格式如图,严格按照这个格式,否则服务器返回400

1、每个HTTP选项末尾都加\r\n

2、HTTP选项的末尾要加上一个空白行,所以末尾要\r\n\r\n

3、POST请求正文放在HTTP请求的最后

键值对:IMEI=%s&model=%s&modelDetail=%s&currentVersion=%s&operator=%d%02d&language=%s

sprintf(buf,"POST /phone/rom/active HTTP/1.1\r\nHost: %s\r\nConnection: close\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: %d\r\nAccept: */*\r\n\r\n%s\r\n", g_sale_domain, strlen(json), json);

json存放了格式化好的键值对。

选项说明

1、Connection 头(header) 决定当前的事务完成后,是否会关闭网络连接。如果该值是“keep-alive”,网络连接就是持久的,不会关闭,使得对同一个服务器的请求可以继续在该连接上完成。

2、Content-Type

application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。
multipart/form-data: 数据被编码为一条消息,页上的每个控件对应消息中的一个部分。
text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符。postman软件里标的是RAW

application\json格式,C可以通过CJson去封装json数据,再通过POST发送请求

3、Content-Length请求实体长度,一开始只设置了Content-Type:application/x-www-form-urlencoded没有设置Content-Length,导致服务器一直无法接受到我的请求参数。。

4、Accept 请求头用来告知客户端可以处理的内容类型,这种内容类型用MIME类型来表示。借助内容协商机制, 服务器可以从诸多备选项中选择一项进行应用,并使用 Content-Type 应答头通知客户端它的选择

5、Host:域名

发布了22 篇原创文章 · 获赞 9 · 访问量 8828

猜你喜欢

转载自blog.csdn.net/ljm_c_bok/article/details/87807727