【问题标题】:Relative URLs and cURL - is there a way to make sure assets from a remote page have the right base url?相对 URL 和 cURL - 有没有办法确保来自远程页面的资产具有正确的基本 URL?
【发布时间】:2017-03-01 04:52:09
【问题描述】:

我有一个 curl 脚本,似乎在做我想做的事,但我无法验证,因为页面上没有加载任何内容。

如果我查看源代码,我可以看到我请求的页面的 html。

当我检查控制台时,它显示了大约 9 个 404 错误,这些资源使用我的 url 作为基础而不是它们实际托管的站点的 url...有没有办法通过相对 url 来防止这种情况在 curl 请求中?

这些 url 应该具有其他站点的基本 url - 我进行了比较,所以我相信它正在拉动页面,但由于 url 错误而无法加载。

我需要以某种方式用 php 替换字符串吗?这可能吗?

<?php 
function login($url,$data){
    $fp = fopen("cookie.txt", "w");
    fclose($fp);
    $login = curl_init();
    curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($login, CURLOPT_TIMEOUT, 40000);
    curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($login, CURLOPT_URL, $url);
    curl_setopt($login, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($login, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($login, CURLOPT_POST, TRUE);
    curl_setopt($login, CURLOPT_POSTFIELDS, $data);
    ob_start();
    return curl_exec ($login);
    ob_end_clean();
    curl_close ($login);
    unset($login); 
} 
function grab_page($site){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($ch, CURLOPT_TIMEOUT, 40);
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($ch, CURLOPT_URL, $site);
    ob_start();
    return curl_exec ($ch);
    ob_end_clean();
    curl_close ($ch);
}
function post_data($site,$data){
    $datapost = curl_init();
    $headers = array("Expect:");
    curl_setopt($datapost, CURLOPT_URL, $site);
    curl_setopt($datapost, CURLOPT_TIMEOUT, 40000);
    curl_setopt($datapost, CURLOPT_HEADER, TRUE);
    curl_setopt($datapost, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($datapost, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($datapost, CURLOPT_POST, TRUE);
    curl_setopt($datapost, CURLOPT_POSTFIELDS, $data);
    curl_setopt($datapost, CURLOPT_COOKIEFILE, "cookie.txt");
    ob_start();
    return curl_exec ($datapost);
    ob_end_clean();
    curl_close ($datapost);
    unset($datapost);    
}
?>
<?php
login("https://example.domain.com/login","email=test.user@mailinator.com&password=12345678987654321");
   echo grab_page("https://example.domain.com/home");
?>

【问题讨论】:

  • 如果我需要添加任何其他信息,请告诉我 - 我试图彻底 - 代码,我能看到的内容,错误 - 我不知道还要寻找什么。

标签: php curl login base-url


【解决方案1】:

对于任何人来说,这可能会有所帮助,我不得不像这样编辑最后几行代码:

<?php
    login("https://example.domain.com/login","email=test.user@mailinator.com&password=12345678987654321");
    echo '<base href="https://example.domain.com" />';
    echo grab_page("https://example.domain.com/home");
?>

在这里找到答案:cURL Html output different from original page when rendered

【讨论】:

  • 正是我想要的。放置在我的 echo $htmlContent 正上方节省了一天!
猜你喜欢
  • 2014-05-10
  • 1970-01-01
  • 2021-11-03
  • 2018-07-29
  • 1970-01-01
  • 2019-09-30
  • 2014-10-27
  • 2022-10-14
  • 2012-11-15
相关资源
最近更新 更多