PHP模拟POST/GET请求,以及http_build_query用法,好陌生?

php开发中,使用http请求再所难免 。
前端有很多请求方法,比如异步的ajax,包括框架也有封装的库等等 。
后端PHP这个语言也有http请求,不单单是前端来请求它 。
那么php中常用的是curl这个库,来实现请求的 。我把我封装的思路说一下吧 。
首先传入的参数,我定的是请求地址,请求方法,是否是https
function curls($url, $post, $https=0){}调用的时候只需要传上面三个对应的参数就行了,甚至第三个都不用传
第二个参数是数组,也可以用来表示post/get请求,主要是用来传参数的
$curl = curl_init();curls($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);curls($curl, CURLOPT_URL, $url);curls($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; curls($curl, CURLOPT_FOLLOWLOCATION, 1);curls($curl, CURLOPT_AUTOREFERER, 1);curls($curl, CURLOPT_REFERER, "http://XXX");curls($curl, CURLOPT_ENCODING,'gzip,deflate');if ($post) { curls($curl, CURLOPT_POST, 1); curls($curl, CURLOPT_POSTFIELDS, http_build_query($post));}大至的就是上面的代码了,但是在这里还是分享一下关于https请求的处理方法
一共分两种 首先第一种是直接绕过ssl,将以下两个参数设置为0或者false
curls($curl, CURLOPT_SSL_VERIFYPEER, false);curls($curl, CURLOPT_SSL_VERIFYHOST, false);这个意思就是不进行验证对比 。
反之,就是要进行ssl验证,代码如下
curls($curl, CURLOPT_SSL_VERIFYPEER, true);curls($curl, CURLOPT_CAINFO, 'SSL的公钥地址');curls($curl, CURLOPT_SSL_VERIFYHOST, true);上面第二行代码需要填写.pem文件,生成的公钥文件地址,用来与https服务器上的文件对比 。
 
除了curl,还有一种PHP内置的stream_context_createstream_context_create,用的人比较少,一般造轮子的人会使用这种写法 。
但是这只是一部分,它需要与file_get_content方法配置一起完成http请求 。
$options = array( 'http' => array('method' => 'POST','header' => 'Content-type:Application/x-www-form-urlencoded','content' => $data//'timeout' => 60 * 60 // 超时时间(单位:s) ));比如现在有上面这个数组,是一组http请求的参数,这时候怎么模拟?
$url = "http://localhost/test.php"; //请求地址
实现
$context = stream_context_create($options);$result = file_get_contents($url, false, $context);成功!
小提一“法”http_build_query
想必用得少吧,除了写原生PHP代码与JAVA对接多的时候会用,一般情况下不会 。
它的作用:将请求参数数组转化为url-encode编码字符串
就这么简单,看个例子
$ars = array ('name' => 'name','age' => 23//可以有很多元素) ;$res = http_build_query($ars);//输出:name=name&age=23over!

【PHP模拟POST/GET请求,以及http_build_query用法,好陌生?】


    推荐阅读