部门对外提供了一个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']);
}ajax
Content-Type:multipart/form-data是上传文件时指定的编码格式json
还有就是当请求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浏览器