另一个cnblogs博客 常用汇总

put和post的区别,几种上传数据的方式,php curl上传对象存储

对于服务器而言,apache可以设置put操作,不用php参与 咳咳,我也不会弄。

在不了解http的情况下,以为http的put和post区别挺大的,结果看的越多越迷糊。

在html form表单里,只支持post和get,get只有header没有body

post则是按enctype来给数据编码组成body

默认是application/x-www-form-urlencoded,编码方式类似get,如username=webkb&title=diff_put_and_post。还有就是对蓝色部分urlEncode,正如其名所示。

常用的上传文件则是multipart/form-data,如果不含文件,与上面差不多,也是=&=,但没有urlEncode

还有一种非常不常见的text/plain,这种和上面也是差不多,没有urlEncode,而且没有=&=。这是HTML5新增的一种格式

有些同学可能会看到诸如application/json,text/xml这样的格式,这些不是HTML5标准。

对php而言,application/x-www-form-urlencoded和multipart/form-data的非文件文本格式都可以通过$_post来获得,效果应该是一样的,如果不一样,则是因为urlEncode,并且被额外的程序对数据进行了一些操作。

对于multipart/form-data带有文件,则文件和文本都会用浏览器自动生成的Boundary(分割线)来分割各个字段。还会有附带文件名称,文件类型,php端用$_files获取

如果是text/plain或其他不被支持的格式可以用file_get_content("php://input")获取。

---------------------------------------------------------------------------------------------------------------------------------

上面post的内容会在header来呈现body数据类型,如application/x-www-form-urlencoded,text/plain,如果是multipart/form-data还要带Boundary

现在用javascript是可以用gethe post之外的方法的,如put,因为现在可以用xhr来上传文件了,除了formdata,还支持二进制文件上传,那么二进制文件是什么格式呢,有人说text/plain,其实应该是application/octet-stream,虽然是不被form支持的格式,谁让人家根本就不走form呢。

=============================================================================================

对于curl,可以用postfields上传文件,方法是模拟form post,可以纯手动模拟,就如同js在没有二进制和formdata之前来模拟上传文件一样。不过还有一种用curlfile的方法替代手工模拟,

我记得之前还有用@引用文件地址来上传文件的,现在已经不支持了,还有一种不是标准的form post方式,直接file_get_contents获取整个文件当成body来上传,话说这不是put该使用的方式吗?curl有一种专用的put上传文件方式,就是readdata指定一个文件句柄,即 fopen(filepath),然后自动计算文件大小,文件类型。最终会读取整个文件内容。

 

终于写完了

posted on 2023-05-09 15:03  webkb  阅读(174)  评论(0编辑  收藏  举报