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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CNN算法详细分析

    CNN算法详细分析test_example_CNN.mtrain_x=double(reshape(train_x’,28,28,60000))/255;test_x=double(reshape(test_x’,28,28,10000))/255;train_y=double(train_y’);test_y=double(test_y’);将输入的数据按照规定的形式组织,并归一化。r…

    2025年9月5日
    7
  • 怎么用谷歌学术下载论文_国内怎么使用谷歌学术

    怎么用谷歌学术下载论文_国内怎么使用谷歌学术如何在谷歌学术下载论文(在MacPro上记录,但是windows应该同样适用)1下载谷歌浏览器下载谷歌浏览器官网截图如下:2下载谷歌浏览器扩展程序googlehelper下载在下载的时候,要记住下载的位置,后面要用。官网截图如下:3将拓展程序插入到谷歌浏览器中1点击设置2进入拓展程序3打开开发者模式4添加解压后的拓展程序4登陆GHelper前提是需要有Gmail的邮箱,请自行搜索注册。5最后就可以开心的使用谷歌学术搜索文章啦有什么问题,欢迎交

    2022年10月11日
    5
  • bwapp之sql注入_sql注入语句入门

    bwapp之sql注入_sql注入语句入门步骤下面简要介绍手工注入(非盲注)的步骤。1.判断是否存在注入,注入是字符型还是整数型2.猜解SQL查询语句中的字段数(orderby)3.确定显示的字段顺序4.获取当前数据库(爆库)5.获取数据库中的表(爆表)6.获取表中的字段名(爆字段)7.下载数据(爆数据)0x01SQLInjection(GET/Search)…

    2022年9月23日
    3
  • 【mysql 索引】mysql 添加索引

    【mysql 索引】mysql 添加索引主要内容:1、什么是索引2、添加索引sql3、索引所用的算法4、补充下概念5、索引的缺点6、经典案例一、什么是索引?  索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建

    2022年6月2日
    38
  • Linux 删除文件夹

    Linux 删除文件夹inux删除目录很简单,很多人还是习惯用rmdir1.直接rm就可以了:rm-rf目录名字-r就是向下递归,不管有多少级目录,一并删除-f就是直接强行删除,不作任何提示的意思

    2022年7月4日
    32
  • 字符串索引越界_字符串的索引和切片

    字符串索引越界_字符串的索引和切片先贴出测试代码:publicclassTestStringIndex{ publicstaticvoidmain(String[]args){ Stringtest=”woshifoucengjilaiguo”; System.out.println(test.length()); chari=test.charAt(21); System.ou

    2025年6月14日
    2

发表回复

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

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