<返回更多

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

2019-08-20    
加入收藏

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_create

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!

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>