我一直在努力让脚本工作,这将遵循相关网址。
问题的快速摘要。
我正在使用FOLLOWLOCATION
选项来关注网址,但是当网址为:
/redirectPage.html
像这样卷曲:
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并为其附加一个字符串?
请帮忙。
答案 0 :(得分:0)
FOLLOWLOCATION
允许cURL
关注响应标题中的Location: /redirects
。但是不允许您下载相对URL。
您需要自己解析网址。要解析相对URL,您需要使用绝对URL作为参考。但是你在哪里提供给cURL?你没有,你不能,你不应该。
清理和解析网址是你的工作。不是HTTP客户端。 cURL解析相对Location: headers
。但不是基于可能从未存在的页面的某些先前内存的相对URL请求。