当前位置: 移动技术网 > IT编程>开发语言>PHP > [日常] 跨语言的POST请求问题的解决

[日常] 跨语言的POST请求问题的解决

2019年10月21日  | 移动技术网IT编程  | 我要评论

部门对外提供了一个http的post接口,但是对方公司的程序员使用c语言进行的调用,php这边一直无法获取到参数.遇到这种情况是因为对方没有完全按照http协议中的post发送数据.在http头部分没有增加content-type: application/x-www-form-urlencoded头,数据部分直接传递的json字符串,这样就导致php这边解析不到$_post的数据,传递内容的字符串应该是以name=xxx&age=xxx这种形式传递

content-type是属于http的内容头部,当增加这个头部,并且数据格式正确时,php的$_post才能够获取得到数据
content-type:application/x-www-form-urlencoded,这个类型是ajax默认的content-type类型,这时前端可以以对象方式直接给后端,或者以json方式传给后端, 当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。 当action为post时候,浏览器把form数据封装到http body中,然后发送到server。在浏览器控制台可以看到它们的内容都是以'from data'形式展现

content-type:application/json
如果ajax的头部是application/json,那么post时,数据必须以json格式传给后端,这时后端在$_post中不能直接接受到数据,必须用$globals['http_raw_post_data']取出来,然后再json_decode就行了。
if($globals['content_type']=='application/json'){
$_post=json_decode($globals['http_raw_post_data']);
}

content-type:multipart/form-data是上传文件时指定的编码格式

还有就是当请求https的数据时,需要指定ca证书的位置,或者忽略掉ca验证,php请求https资源的时候使用curl扩展有参数可以忽略验证,如果是使用curl命令,那该命令使用的证书的位置是在/etc/pki/tls/certs/ca-bundle.crt

当使用cur无法访问https资源的时候,就需要下面的操作
1.需要下载ca证书 文件地址是 http://curl.haxx.se/ca/cacert.pem
2.把下载的文件放到这个位置 /etc/pki/tls/certs/ca-bundle.crt

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网