使用curl获取Location:重定向后url

在php获取http头部信息上,php有个自带的函数get_headers(),我以前也是用这个的,听说效率在win上不咋地,再加上最近研究百度url无果,写了cURL获取重定向url的php代码来折腾。
以前我是用get_headers来获取跳转后的url

get_headers的代码


1

2

3

4

5

6

7

8

9

10

11

//curl的百度百科

$url = http://www.baidu.com/link?url=77I2GJqjJ4zBBpC8yDF8xDhiqDSn1JZjFWsHhEoSNd85PkV8Xil-rckpQ8_kjGKNNq;

$header = get_headers($url,1);

if (strpos($header[0],‘301‘) || strpos($header[0],‘302‘)) {

    if(is_array($header[‘Location‘])) {

        $info = $header[‘Location‘][count($header[‘Location‘])-1];

    }else{

        $info = $header[‘Location‘];

    }

}

echo $info;

现在用cURL来重写一遍代码
CURL是需要设置curl_setopt 和curl_getinfo才可以获取 Location:重定向


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

//curl的百度百科

$url = http://www.baidu.com/link?url=77I2GJqjJ4zBBpC8yDF8xDhiqDSn1JZjFWsHhEoSNd85PkV8Xil-rckpQ8_kjGKNNq;

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

// 不需要页面内容

curl_setopt($ch, CURLOPT_NOBODY, 1);

// 不直接输出

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// 返回最后的Location

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

curl_exec($ch);

$info = curl_getinfo($ch,CURLINFO_EFFECTIVE_URL);

curl_close($ch);

echo ‘真实url为:‘.$info;

因为还和网速有关,两段代码的效率我还没测试 。我使用get_headers本地测试是可以的,但是上传至服务器执行出错,不知道为什么?

end....

来源:http://enenba.com/?post=252

PHP获取重定向URL的几种方法:http://blog.sina.com.cn/s/blog_5b1acf750102v6iw.html

时间: 2024-10-03 22:51:46

使用curl获取Location:重定向后url的相关文章

apache使用.htaccess文件中RewriteRule重定向后,URL中的加号无法解析

今天在使用.htaccess做伪静态的时候,发生一件怪事,URL里存在C++时会有问题,在处理C++这个词的时候,无论如何,$_GET都得不到++,只能得到C空格. 一开始我以为是没用urlencode处理,后来发现确确实实处理了,后台经过排查,确定是rewrite的问题,因为在单文件的环境是可以得到C++这个词的,当然,是经过了urlencode的. 原因:rewrite得不到c++这个词,是因为APACHE在得到参数后,自行做了urldecode处理,导致无法得到C++中的加号部分 决方案目

curl获取http请求的状态码

$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); //设置头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_HEADER, 1); //设置获取的信息以文件流的形式返回,而不是直接输出. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); 获取http请求后返回的状态码 $http_status =

读取页面元素的onclick属性值 禁止重定向 获取url重定向后Location头指定的重定向目标

(1) 读取页面元素的onclick属性值 html代码: <a id='linka' onclick="alert('ok');">链接</a> 取出item身上onclick属性的值:alert('ok'); 实现: IHTMLElement *item;// 已经找到该元素 CComQIPtr<IHTMLElement> spElem(item); VARIANT var; spElem->get_onclick(&var); C

Java 纯HTTP Get请求获取响应内容,如果302,继而获取重定向后的响应内容。

public static void main(String[] args) {      try {        StringBuffer buffer = new StringBuffer();                  String url = "http://localhost:8080/istock/login?u=name&p=pass";               System.out.println("访问地址:" + url);

Java 获取网络重定向文件的真实URL

其实Java 使用HttpURLConnection下载的的时候,会自动下载重定向后的文件,但是我们无法获知目标文件的真实文件名,文件类型,用下面的方法可以得到真实的URL,下面是一个YOUKU视频的例子. import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; public class Test2 { public static void main(String[] args) th

curl获取网站的响应时间

curl获取网站的响应时间 0.问题 总有人反馈说打开某个页面比较慢, 但是他们并不清楚到底慢在哪里. 同样的问题, 在我们访问外部业务的接口时, 往往也是感觉很慢, 但就是不清楚慢在哪里. 1.分析 当我们打开一个网页, 对于一个不需要考虑技术的人, 想象的画面应该是, 我们通过地址栏问浏览器要个东西, 然后浏览器通过我们提供的地址去对应的服务器取对应的文件, 然后根据服务器的回应将内容显示给我们. 从一个运维人员的视角, 可能就不能这么简单粗暴地想象了, 否则可能永远也无法确认问题究竟出现在

js获取请求地址?后的参数和值

js获取请求地址?后的参数和值 //获取url中的参数 function getUrlParam(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象 //alert("window.location.search="+window.location.search); var r = window.locat

ThinkPHP中如何获取指定日期后工作日的具体日期

思路: 1.获取到查询年份内所有工作日数据数组2.获取到查询开始日期在工作日的索引3.计算需查询日期索引4.获得查询日期 /*创建日期类型记录表格*/ CREATE TABLE `tb_workday` ( `did` int(11) NOT NULL AUTO_INCREMENT, `exact_date` varchar(32) NOT NULL COMMENT '具体日期:格式date("Ymd");(20170205)', `date_year` varchar(32) NOT

PHP curl获取页面内容,不直接输出到页面,CURLOPT_RETURNTRANSFER参数设置

使用PHP curl获取页面内容或提交数据,有时候希望返回的内容作为变量储存,而不是直接输出.这个时候就必需设置curl的CURLOPT_RETURNTRANSFER选项为1或true. 1.curl获取页面内容, 直接输出例子: <?php $url = 'http://52php.cnblogs.com'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPE