总的来说,复用HTTP连接有两个好处:
1. 节省系统端口资源(每一次连接都要使用端口,端口的资源是有限的)
2. 节省创建socket连接的时间。
下面讲讲在PHP下面,如何使用CURL来复用连接:
curl是在一个handle里面复用连接的,所以这样就可以复用连接了:
$ch = curl_init()
$ret = curl_exec($ch)
......
$ret2 = curl_exec($ch)
....
curl_close($ch)
在初始化跟关闭$ch资源时即可复用连接。
我这里写了两个函数,可以支持GET跟POST的请求,大家感兴趣可以看看。
function curl_get($url, $timeout=5) {
global $g_handle
if (empty($g_handle)) $ch = curl_init()
$options = array(
CURLOPT_URL=>$url,
CURLOPT_RETURNTRANSFER =>true,
CURLOPT_FRESH_CONNECT =>false,
CURLOPT_FORBID_REUSE =>false,
CURLOPT_TIMEOUT=>$timeout
)
curl_setopt_array($g_handle, $options)
$ret = curl_exec($g_handle)
return $ret
}
// 可以支持POST数据,$post是一个数组,$timeout是超时时间。
function curl_post($url, $post=array(), $timeout=10) {
global $g_handle
if (empty($g_handle)) $g_handle = curl_init()
$options = array(
CURLOPT_URL =>$url,
CURLOPT_POST =>true,
CURLOPT_RETURNTRANSFER =>true,
CURLOPT_FRESH_CONNECT =>false,
CURLOPT_FORBID_REUSE =>false,
CURLOPT_TIMEOUT =>$timeout,
CURLOPT_POSTFIELDS =>http_build_query($post)
)
if (empty($post)) $options[CURLOPT_POST] = false
curl_setopt_array($g_handle, $options)
$ret = curl_exec($g_handle)
return $ret
}
ajax动态获取,直接JQ库站内
$.getJSON('xxxx.php?xxxx',function(){
OPTION
})
如果你是想用curl获取别人网站上的Js内容只能解JS然后模拟去获取,或者无解