php如何使用CURL复用连接
答案:1 悬赏:0 手机版
解决时间 2021-01-08 03:26
- 提问者网友:箛茗
- 2021-01-07 14:02
php如何使用CURL复用连接
最佳答案
- 五星知识达人网友:北方的南先生
- 2021-01-07 14:21
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;
}
总的来说,复用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;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯