php curl 301跳转怎么处理

PHP CURL 301跳转是一种HTTP状态码,表示请求资源已永久移动到其他位置。它由服务器发出,而客户端(浏览器)总是收到一个带有新位置的响应,并重定向到新位置。CURL 301跳转就是使用cURL程序来处理这些类型的响应。

处理PHP CURL 301跳转最简单的方法是使用CURLOPT_FOLLOWLOCATION参数,使curl能够跟随定义的重定向URL到新位置。在编写curl程序时,我们可以在CURLOPT_FOLLOWLOCATION参数值设定为TRUE,以允许curl跟随重定向的URL。例如:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

然而,有1个重要的限制,就是PHP CURL301跳转只能跟随5个HTTP重定向。如果你要处理更多的HTTP重定向,就必须更主动地使用cURL API来手动追踪总是在curl回调函数中设置和使用。因此,使用以下函数可以处理任意多的301跳转:

function curl_redir_exec($ch, & $redirects, $curlopt_header = false)

{

curl_setopt($ch, CURLOPT_HEADER, true);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$data = curl_exec($ch); $headers = curl_getinfo($ch);

$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if($http_code == 301 || $http_code == 302) {

list($header) = explode(“\r\n\r\n”, $data, 2);

$matches = array(); preg_match(‘/(Location:|URI:)(.*?)\n/’, $header, $matches);

$url = trim(array_pop($matches));

$url_parsed = parse_url($url);

if (isset($url_parsed))

{

$redirects++;

curl_setopt($ch, CURLOPT_URL, $url);

return curl_redir_exec($ch, $redirects, $curlopt_header);

}

}

if($curlopt_header) {

return array($data, $headers);

} else {

return $data;

}

}

此函数会自动处理无限多个301跳转,并且它返回所需要的响应数据。

PHP Curl 301跳转时处理方式有两种:1、由CURL自动处理;2、由程序处理。

一、由CURL自动处理301重定向的方式

这种方式是比较常用的,它首先会检测到301重定向,然后自动执行来访链接的新地址,并且保存新的cookie:

$curl = curl_init();// 初始化

curl_setopt($curl, CURLOPT_URL, $url); // 设置访问URL

curl_setopt($curl, CURLOPT_FOLLOWLOCATION,TRUE);// 允许内部跳转

curl_setopt($curl, CURLOPT_HEADER, 0); // 不将本次跳转保存到Header中

curl_exec($curl); //执行

?>

二、由程序处理301重定向的方式

这个处理方式用的比较少,我们可以主动检测到重定向,然后手动执行跳转,并且保存新的cookie:

$curl = curl_init($url);​

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);​

$data = curl_exec($curl);​

// 检查是否有301/302跳转 重定向 ​

$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);​

if($httpCode == 301 || $httpCode == 302){

// 监测到重定向, 获取新链接:

$location = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);

curl_close($curl);

// 继续使用PHP Curl 执行重定向链接:

$curl2 = curl_init($location);

curl_setopt($curl2, CURLOPT_RETURNTRANSFER, 1);

// 执行重定向链接

$data = curl_exec($curl2);

// 保存新的cookie:

curl_setopt($curl2, CURLOPT_COOKIEJAR, ‘cookie.txt’);

// 执行之后关闭curl:

curl_close($curl2);

}

?>

以上就是PHP Curl 301重定向时典型处理方式。通过设置CURLOPT_FOLLOWLOCATION我们可以实现重定向处理及其后续操作;也可以通过检查状态码,然后手动处理重定向。

购买须知:
1. 因源代码属于知识性付费产品且具复制性,买家付款后将不支持以其他任何理由要求退款(为此请确保在演示站测试无误后再下单);
2. vip免费下载的源码均为未测试源码,不能保证源码完整均为框架,本站只收集搬运资源、我们不验证资源是否完整与可用,需要会员自行研究搭建测试 。
3. 该程序源码应在符合法律法规的条件下仅用于相关正规场景的测试、娱乐以及学习交流,不得用于商业活动及非法途径,如若违反国内外现行法律法规及其所产生的一切不良后果与本店无关,且本店有权单方暂停或终止服务,并享有持续追究其法律责任的权利;
4. 若您最终确认购买,则视为您认同并接受以上所述全部内容。
免责声明:
1.本文部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
2.若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
3.如果本站有侵犯、不妥之处的资源,请在网站右边客服联系我们。将会第一时间解决!
4.本站所有内容均由互联网收集整理、网友上传,仅供大家参考、学习,不存在任何商业目的与商业用途。
5.本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
6.侵权联系邮箱:188773464@qq.com

moyy免费源码分享 建站教程 php curl 301跳转怎么处理 https://moyy.us/1361.html

相关文章