事例:
今天要向一台服務器上傳文件,原版是curl的get模式,現在改用了post模式,按照原本的思想,代碼如下
1 <?php 2 $post['c'] = 'config'; 3 $post['t'] = 'show'; 4 $post['o'] = 'xml'; 5 $post['ssid'] = '%07o%B4%88O%EE%0Ca%07%DA%D8i%D36HE%AF%28%BC%3C%BE%D5s%DFv%A6%D83%D9%3E%16%96U%B4q%BA%0A%9A%DE%F0%BFJjh%DF2%FF%D2'; 6 7 8 $curl = curl_init(); 9 curl_setopt($curl, CURLOPT_URL,"http://172.16.59.130:28099/cgi-bin/japi.cgi"); 10 curl_setopt($curl, CURLOPT_POST, true); 11 curl_setopt($curl, CURLOPT_POSTFIELDS, $post); 12 curl_setopt($curl, CURLOPT_ENCODING, "gzip"); 13 curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36 14 Accept-Encoding: gzip,deflate,sdch"); 15 16 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 17 curl_setopt($curl, CURLINFO_HEADER_OUT, true); 18 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); 19 $contents = curl_exec($curl); 20 curl_close($curl); 21 echo $contents; 22 ?>
但是耗時總是在2s左右,而用get模式則是很快,剛開始懷疑是服務器的問題,但是抱着試試看的態度,查了下curl post有什么特殊的地方,這還真發現了。
在php curl post模式上,啟用時會發送一個常規的POST請求,類型為:application/x-www-form-urlencoded,就像表單提交的一樣。
如果把要post的數組轉換成字符串,像get那種url,速度就上來了
1 <?php 2 $post['c'] = 'config'; 3 $post['t'] = 'show'; 4 $post['o'] = 'xml'; 5 6 $post = http_build_query($post); 7 $post .= "&ssid=%07o%B4%88O%EE%0Ca%07%DA%D8i%D36HE%AF%28%BC%3C%BE%D5s%DFv%A6%D83%D9%3E%16%96U%B4q%BA%0A%9A%DE%F0%BFJjh%DF2%FF%D2"; 8 9 $curl = curl_init(); 10 curl_setopt($curl, CURLOPT_URL,"http://172.16.59.130:28099/cgi-bin/japi.cgi"); 11 curl_setopt($curl, CURLOPT_POST, true); 12 curl_setopt($curl, CURLOPT_POSTFIELDS, $post); 13 curl_setopt($curl, CURLOPT_ENCODING, "gzip"); 14 curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36 15 Accept-Encoding: gzip,deflate,sdch"); 16 17 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 18 curl_setopt($curl, CURLINFO_HEADER_OUT, true); 19 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); 20 $contents = curl_exec($curl); 21 curl_close($curl); 22 echo $contents; 23 ?>