繁体   English   中英

卷毛Location.reload(true)结果

[英]Curl Location.reload(true) Result

当我尝试使用CURL获取markafoni.com的html数据时,它会返回;

<script>
document.cookie = 'NSId=2;expires=Sun, 17-Jan-2038 01:00:00 GMT';
location.reload(true);
</script><noscript>%90'a varan indirim Markafoni'de</noscript>

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER,true);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_COOKIESESSION,true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt($ch, CURLOPT_REFERER, 'http://www.markafoni.com/');
curl_setopt($ch, CURLOPT_URL, 'https://www.markafoni.com/');

我怎么解决这个问题?

问题是服务器设置cookie的技术,这很特殊。 实际上,它可能旨在防止像您所做的那样刮擦屏幕,但是可能还有其他原因。

服务器显然有两个不同的响应。

  1. 如果未设置NSId cookie,则发送一些Javascript来设置其中一个, NSId发送任何其他内容。
  2. 如果设置了NSId cookie,请发送页面内容。

cURL显然可以从服务器接收和设置cookie,就像使用以下代码一样:

curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');

但是,这假定服务器以正常方式(即使用Cookie HTTP标头)设置Cookie。 由于它使用Javascript进行处理(非常特殊!),cURL无法理解它。

您必须使用CURLOPT_COOKIE选项CURLOPT_COOKIE设置cookie:

curl_setopt($ch, CURLOPT_COOKIE, 'NSId=2');

CURLOPT_COOKIE选项设置由cU​​RL发送的cookie字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM