php开发中,使用http请求再所难免。
前端有很多请求方法,比如异步的ajax,包括框架也有封装的库等等。
后端PHP这个语言也有http请求,不单单是前端来请求它。
我把我封装的思路说一下吧。
首先传入的参数,我定的是请求地址,请求方法,是否是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服务器上的文件对比。
stream_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=23
over!