PHP取301/302跳转后的地址源码协议头中的location等
效率至尊,先上代码!
//$url = "https://www.houbuluo.com/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //若给定url自动跳转到新的url,有了下面参数可自动获取新url内容:302跳转 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //设置cURL允许执行的最长秒数。 curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Safari/537.36"); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_ENCODING, "gzip, deflate"); $content = curl_exec($ch); //获取请求返回码,请求成功返回200 $code = curl_getinfo($ch,CURLINFO_HTTP_CODE); //echo $code . " "; //获取一个cURL连接资源句柄的信息。 //$headers 中包含跳转的url路径 $headers = curl_getinfo($ch); //var_dump($headers[url]); $url= $headers["url"];//302后的url地址,如果要获取302后的源码自行file_get_contents这个地址即可<br>
今天猴猴有个业务场景需要取302跳转后的地址,而地址在协议头header的location中,小编尝试了curl POST测试,file_get_contents函数测试,JS POST测试,网上分享的socket方法(小编并不了解),甚至拿起了python的request测试(虽然python能直接获取302后的源码,但是介于还要在原本的php环境中配置python项目,就没采用),小编测试了网站各作者分享的几十种POST,GET方法,都不能将302后的代码或者URL地址取出,后来如上正确方法终于现身了,小编所做的场景才得以实现,小编找不到原来的作者了,在此感谢前辈!