如何使用CURL复用连接

JavaScript041

如何使用CURL复用连接,第1张

HTTP1.0与HTTP1.1的一个很大的差别是HTTP1.1支持长连接。现实中有很多这个场景,就是请求了一个页面,然后这个页面的其他内容,例如CSS文件,JS文件都要从同一个服务(相同服务器,相同端口)上面获取。这些向相同服务器的请求如果能够复用连接,是很有利于提供网络性能。

总的来说,复用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然后模拟去获取,或者无解