做爲第三方開發商,常常會須要調用平臺接口,遠程調用,就要用到curl,其實質就是叫調用的方法與用到的參數以http post的方式發送至平臺服務器。 簡單的例子: $url = 'http://'; //調用接口的平臺服務地址 $post_string = array('a'=>'b'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 30); $result = curl_exec($ch); curl_close($ch); 其實CURLOPT_POSTFIELDS的這個設置中,亦能夠直接發送數組的,可是這樣作的後果是嚴重增長的請求的時間,耗時大約在2秒多,一樣的操做用socket方式操做則正常,在毫秒級別。 若將此處:curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); 修改成:curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data)); 則執行時間恢復正常 PS: http_build_query — 生成 URL-encode 以後的請求字符串 說明 string http_build_query ( array $formdata [, string $numeric_prefix ] ) 使用給出的關聯(或下標)數組生成一個通過 URL-encode 的請求字符串。參數 formdata 能夠是數組或包含屬性的對象。一個 formdata 數組能夠是簡單的一維結構,也能夠是由數組組成的數組(其依次能夠包含其它數組)。若是在基礎數組中使用了數字下標同時給出了 numeric_prefix 參數,此參數值將會做爲基礎數組中的數字下標元素的前綴。這是爲了讓 PHP 或其它 CGI 程序在稍後對數據進行解碼時獲取合法的變量名。 Note: 用 arg_separator.output 來分隔參數。 Example #1 http_build_query() 使用示例 <?php $data = array('foo'=>'bar', 'baz'=>'boom', 'cow'=>'milk', 'php'=>'hypertext processor' ); echo http_build_query($data); // foo=bar&baz=boom&cow=milk&php=hypertext+processor ?> Example #2 http_build_query() 使用數字下標的元素 <?php $data = array('foo', 'bar', 'baz', 'boom', 'cow' => 'milk', 'php' =>'hypertext processor'); echo http_build_query($data); echo http_build_query($data, 'myvar_'); ?>