【问题标题】:curl request redirects me to localhost pagecurl 请求将我重定向到 localhost 页面
【发布时间】:2017-07-08 11:27:03
【问题描述】:

总的来说,我是 curl 和 php 的新手,目前我正在尝试获取页面源代码,以便稍后使用它。

这是我的全部代码

$ch = curl_init();
$id="3005752358";
$url = "https://www.opendota.com/matches/".$id;
$header[] = "Accept: application/json";
$header[] = "Accept-Encoding: gzip";
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt( $ch, CURLOPT_HTTPHEADER, $header );
curl_setopt($ch,CURLOPT_ENCODING , "gzip");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

$response = curl_exec ($ch);
 if ($response === false) 
    $response = curl_error($ch);
echo stripslashes($response);
curl_close($ch);
echo "asd";

由于某种原因,当我打开页面时,它会将我重定向到这个 url:localhost

4年前有一个类似的问题,但看起来主题完全不同(PHP cURL redirects to localhost

【问题讨论】:

    标签: php redirect curl


    【解决方案1】:

    因为来自该 URL 的响应包含重定向的 javascript:

    <script>
      window.sessionStorage.redirect = window.location.href;
    </script>
    

    以及刷新页面的元标记,指向站点根目录。

    <meta http-equiv="refresh" content="0;URL='/'"></meta>
    

    尝试在控制台中查看输出,因为下次在浏览器中调试此类事情只会导致明显的混乱。

    【讨论】:

    • 当然,如前所述,请查看控制台的输出,或者如果您坚持在浏览器中执行操作,请发送 text/plain 内容类型标头以及 PHP 的响应。跨度>
    • 看起来这个网站被保护不能查看它的源代码,即使在浏览器中它返回一些小代码而不是实际的页面源
    • 不知道你是如何得出这个结论的,但是 FWIW,这个 URL 清楚地返回了 HTTP 404 Not Found 状态代码。您可以通过查看var_dump(curl_getinfo($ch)) 看到这一点
    • 好吧,浏览器opendota.com/matches/3005752358中的这个页面返回了我需要的,但是它在同一个浏览器中的源代码返回了相同的小页面,window.sessionStorage.redirect = window.location.href;这段代码
    • 它似乎是依靠 javascript 将请求重新发送到 https://api.opendota.com/api/matches/3005752358。服务器似乎有访问控制来源限制,所以是的。您将无法以您尝试的方式轻松地使其与 curl 一起使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    相关资源
    最近更新 更多