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!