php – cURL从重定向获取url

php – cURL从重定向获取url

大家好,又见面了,我是全栈君。

我目前正在使用cURL尝试从网站刮刀的重定向获取URL.我只需要网站上的网址.我在过去几天研究过stackoverflow和其他网站,但都没有成功.我目前使用的代码来自这个网站:

  $url = "http://www.someredirect.com";
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');         
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HEADER, true);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
  curl_setopt($ch, CURLOPT_NOBODY, true);
  $response = curl_exec($ch);
  preg_match_all('/^Location:(.*)$/mi', $response, $matches);
  curl_close($ch);
  echo !empty($matches[1]) ? trim($matches[1][0]) : 'No redirect found';

任何帮助将不胜感激!

最佳答案
在您的特定情况下,服务器正在检查某些用户代理字符串.

 

当服务器检查用户代理字符串时,只有当服务器看到“有效”(根据服务器)用户代理时,它才会响应302重定向状态代码.任何“无效”用户代理都不会收到302重定向状态代码响应或Location:标头.

在您的特定情况下,当服务器收到来自“无效”用户代理的请求时,它会响应200 OK状态代码,而响应正文中没有文本.

(注意:在下面的代码中,提供的实际URL已被示例替换.)

假设http://www.example.com的服务器检查用户代理字符串,并且http://www.example.com/product/123/重定向到http://www.example.org/abc.

在PHP中,您的解决方案是:

 

<?php

$url = 'http://www.example.com/product/123/';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0"); // Necessary. The server checks for a valid User-Agent.
curl_exec($ch);

$response = curl_exec($ch);
preg_match_all('/^Location:(.*)$/mi', $response, $matches);
curl_close($ch);

echo !empty($matches[1]) ? trim($matches[1][0]) : 'No redirect found';

  

并且,此脚本的输出将是:http://www.example.org/abc.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112120.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql如何查看用户及其权限「建议收藏」

    mysql如何查看用户及其权限「建议收藏」【1】查看mysql数据库中的所有用户SELECTDISTINCTCONCAT(‘User:”’,user,”’@”’,host,”’;’)ASqueryFROMmysql.user;【2】查看某个用户的权限showgrantsfor’nextcloud’@’%’;orselect*frommysql.userwhereuser=’r…

    2022年6月18日
    23
  • 321_MediaType Media Type 是什么

    321_MediaType Media Type 是什么MediaType是什么MediaType在网络协议的消息头里面叫做Content-Type使用两部分的标识符来确定一个类型所以我们用的时候其实就是为了表明我们传的东西是什么类型比如application/json:JSON格式的数据,在RFC4627中定义application/javascript:JavaScript,在RFC4329中定义但是…

    2022年5月9日
    81
  • mysql窗口函数rank_rank函数降序排名

    mysql窗口函数rank_rank函数降序排名窗口函数MySQL8.0之后支持窗口函数。窗口指的是记录集合,窗口函数是指在某种条件的记录集合上执行的特殊函数。静态窗口是指不同的记录对应的窗口大小是固定的,而滑动窗口是指随着记录的不同窗口的大小是动态变化的。窗口函数分类1)专用窗口函数,包括后面要讲到的rank,dense_rank,row_number等专用窗口函数。2)聚合函数,如sum.avg,count,max,min等注意事项窗口函数原则上只能写在select子句中,因为窗口函数是对where或者groupby子句

    2022年10月4日
    2
  • 如何安装GCC

    如何安装GCC现在的CentOs8上没有自带的gcc编译器因此需要下载(注意:这里的下载是指在虚拟机中下载,不是指在电脑上下载)若运行gcc时出现appstream下载元数据失败则表明没有安装gcc。1首先需要获得root权限****在终端模式下输入su,按下回车输入密码即可(注意这里的输入密码无显示)2检查虚拟机是否联网(当然要先确保电脑已联网)3检查网络是否正常输入pingwww….

    2022年5月9日
    343
  • activity生命周期_activity的生命周期有哪些状态

    activity生命周期_activity的生命周期有哪些状态一、概述方法简述onCreate()//在系统首次创建Activity时触发在onCreate()方法中,您需执行基本应用启动逻辑,该逻辑在Activity的整个生命周期中只应发生一次。例如,onCreate()的实现可能会将数据绑定到列表,将Activity与ViewModel相关联,并实例化某些类范围变量。此方法接收savedInstanceSta…

    2022年8月16日
    7
  • stream.of 与list.stream的区别,在使用filter过滤时的区别「建议收藏」

    stream.of 与list.stream的区别,在使用filter过滤时的区别「建议收藏」stream.of 与list.stream的区别,在使用filter过滤时的区别

    2022年4月24日
    64

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号