0

可能重复:
是否可以在 PHP 中使用 curl 和相对路径?

我已经尝试了几个小时来让一个脚本工作,该脚本将遵循相对 url。

问题的快速总结。

我正在使用FOLLOWLOCATION跟踪 URL 的选项,但是当 url 是:

/redirectPage.html

curl 像这样跟随它:

localhost/redirectPage.html

这是我的代码:

$ch = curl_init();

//set options
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiejar);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTP_VERSION, 'CURL_HTTP_VERSION_1_1');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);


$content = curl_exec($ch);


curl_close($ch);

我发现的几个“解决方案”涉及解析 DOM 文档并用绝对 URL 替换 href 属性,但我正在寻找一个允许我仍然使用FOLLOWLOCATION. 有没有办法在 curl 中设置一个基本 URL,或者捕获FOLLOWLOCATION选项中跟随的重定向 url 并附加一个字符串?

请帮忙。

4

1 回答 1

0

FOLLOWLOCATION允许cURL跟随Location: /redirects响应标头。但不允许您下载相对 URL。

您需要自己解析 URL。要解析相对 URL,您需要一个绝对 URL 作为参考。但是你在哪里将它提供给 cURL?你不,你不能,你不应该。

清理和解析 URL 是您的工作。不是 HTTP 客户端的。cURL 解析相对Location: headers. 但不是基于可能从未存在的页面的某些先前内存的相对 URL 请求。

于 2012-11-01T19:47:28.743 回答