header content-type content-typeapplication/json

以前,我无法区分post请求中的内容类型模式,如application/x-www-form-URL编码和multipart/form-data。本文将介绍几种内容类型、插件Postman和RESTClient的使用示例。在文章的最后,我们还会介绍PHP中使用CURL需要注意的细节。

简介

Http报头中通常有三种类型的内容类型:

application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。

Multipart/form-data:数据被编码为消息,页面上的每个控件对应于消息的一部分。

Text/plain:数据以纯文本(text/json/xml/html)编码,没有任何控件或格式字符。邮递员软件的标准是原始的。

表单的enctype属性是一种编码方法,常用的方法有两种:application/x-www-form-urlencoded和multipart/form-data,默认值为application/x-www-form-urlencoded。

当动作为get时,浏览器将表单数据转换为字符串(name 1 = value 1 &;名称2 =值2…),然后将这个字符串附加到url后,用?拆分并加载这个新的url。

当动作是post时,浏览器将表单数据封装到http主体中,并发送给服务器。如果没有type=file的控件,就使用默认的应用程序/x-www-form-urlencoded。但是如果有type=file,将使用multipart/form-data。

当操作是post并且内容类型类型是multipart/form-data时,浏览器会将整个表单划分为多个控件,并为每个部分添加内容处理(表单数据或文件)、内容类型(默认为text/plain)、名称(控件名称)和边界等信息。

邮递员用法举例及分析

Postman是调试和发送HTTP请求的强大工具。

你可以在这里下载。官方网站:https://www.getpostman.com/.

这里要求的是百度短URL的API。

生成短URL

请求:向http://dwz.cn/create.php,发送一个post请求,发送的数据包括url= long URL。

返回:json格式的数据

地位!错误=0,请检查err_msg以获取错误信息(UTF-8编码)。

成功,返回生成的短URL tinyurl字段。

1、使用application/x-www-form-encoded方式:

header content-type content-typeapplication/json

这种方式用的比较多。这是发送预览:

实际发送的内容:

2、使用多部分/形式数据模式:

这也可以指定为多部分/表单数据模式。

这种方法通常在上传文件时使用。这是发送预览:

实际发送的内容:

3.使用文本/普通模式:

该方法通常用于向服务器发送json数据。百度短URL API不支持此方法,此处仅做演示。

实际发送的内容:

使用RESTClient的例子和分析

REST Client是一个用于测试REST服务的firefox插件。

和Postman相比,界面简单多了。

REST客户机的默认内容类型是text/plain。如果你想使用application/x-www-form-URL编码或multipart/form-data模式,你需要点击菜单头>;要添加的自定义标题:

示例:使用application/x-www-form-urlencoded模式:

如果您使用多部分/形式数据模式并想要添加文件,您可以单击菜单file >;要添加的加载请求。

在PHP中使用CURL需要注意内容类型的细节。

看看这个例子:

生成短URL

复制& lt?PHP $ ch = curl _ init();curl_setopt($ch,CURLOPT_URL,” http://dwz . cn/create . PHP “);curl_setopt($ch,CURLOPT_POST,true);curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);$ data = array(‘ URL ‘ = & gt;http://www . Baidu . com/’);//$ data = http _ build _ query($ data);//建议添加,否则使用multipart/form-data类型curl _ set opt ($ ch,curl opt _ post字段,$ data);$ strRes = curl _ exec($ ch);curl _ close($ ch);$ arr response = JSON _ decode($ strRes,true);if($arrResponse[‘status’]!= 0){ echo $ arr response[‘ err _ msg ‘]。”\ n”;}echo $arrResponse[‘tinyurl’]。”\ n”;这里$ data = http _ build _ query($ data);可选,建议添加。最后,我们通过$_POST读取数据。

http_build_query的作用是将参数经过URL-encode后转换成请求字符串,与application/x-www-form-URL编码的方式一致。

为什么不用http_build_query方法就可以用$_POST获取数据?

有一种说法是:

CURL组件在使用array提供post数据时,为了兼容@filename等上传文件的写入方式,很可能默认将Content-Type设置为multipart/form-data。虽然它不影响大多数服务器,但仍有少数服务器不兼容。

当在PHP参考手册中介绍curl_setopt时,它说:

CURLOPT_POSTFIELDS

所有数据都是通过使用HTTP协议中的“POST”操作来发送的。要发送文件,请在文件名前加上@并使用完整路径。该参数可以通过类似于“para 1 = val 1 & amp;para2 = val2 & amp…’或者使用字段名作为键值、字段数据作为值的数组。如果value是一个数组,Content-Type头将被设置为multipart/form-data。

在注释中:

注意:

向CURLOPT_POSTFIELDS传递数组会将数据编码成multipart/form-data,而传递URL编码的字符串会将数据编码成application/x-www-form-urlencoded。

总结:

当使用CURL且参数为data时,向服务器提交数据时,HTTP头会发送content _ type:application/x-www-form-urlencoded。这是一个正常的网页

当然,如果发送json数据,需要在发送之前使用json_encode($data),使用text/plain模式。

Http标头概述

有请求头和响应头。

请求头包含Accept、Accept-Charset、Cookie、Content-Type、Referer等等。

详见在线HTTP接口测试。

或者检查http/1.1:头字段定义。

信息:

1.Http请求中的内容类型解释及其在Spring MVC中的应用

http://blog.csdn.net/blueheart20/article/details/45174399

2.PHP _php Skills _ Script House中CURL的CURLOPT_POSTFIELDS参数的使用细节

http://www.51.net/article/48185.htm

本文首发于微信官方账号的“fhyblog”,欢迎关注。博客地址:https://52fhy.cnblogs.com

(本文结束)

版权声明:未注明转载或特别声明为作者原创。本文经以下协议授权,免费转载-非商业-非衍生-保留署名|知识共享BY-NC-ND 3.0转载请注明作者及出处。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论