我的curl post请求中是否包含cookie?

时间:2020-09-11 12:53:15

标签: php curl cookies http-headers http-post

我需要登录http://auto.vsk.ru/login.aspx,并从我的网站对其发布请求。 我编写了一个js ajax函数,该函数将发布请求发送到服务器上的php脚本,并通过cUrl发送跨域请求。

post.php

<?php

function request($url,$post, $cook)
{
$ch = curl_init();
$curlConfig = array(
CURLOPT_URL            => $url,
CURLOPT_POST           => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_COOKIEFILE => $cook,
CURLOPT_COOKIEJAR => $cook,
CURLOPT_USERAGENT => '"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Trident/7.0; Touch; .NET4.0C; .NET4.0E; Tablet PC 2.0)"',
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_REFERER => $url,
CURLOPT_POSTFIELDS     => $post,
CURLOPT_HEADER => 1,
);
curl_setopt_array($ch,$curlConfig);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}

$result = request($_POST['url'], $_POST['data'], $_POST['cook']);

if ($result === FALSE) 
 echo('error');
else
 echo($result);

?>

Js代码:

function postcross(path,data,cook,run)
{
requestsp('post.php','url='+path+'&data='+data+'&cook='+cook, run);
}

function requestp(path, data, run)
{
var http = new XMLHttpRequest();
http.open('POST', path, true);

http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

http.onreadystatechange = function() 
{  
if(http.readyState == 4 && http.status == 200)
{
    run(http);
}
}

http.send(data);
}

postcross('http://auto.vsk.ru/login.aspx',encodeURIComponent('loginandpassord'),'vskcookies.txt',function(e){
document.getElementById('container').innerText=e.responseText;
});

我从响应中获得的html页面说了两件事:

  1. 我的浏览器不是Internet Explorer,我应该切换到它。(实际上它可以在Google Chrome上运行,至少可以登录)。
  2. 我的浏览器不支持cookie。

关于cookie,它与this(长期旅行)问题非常相似。文件vskcookies.txt是在我的服务器中创建的,实际上是在发出请求请求后更新的,并存储cookie。

关于IE,首先我认为该网站会从JS检查浏览器,但这是错误的,因为JS根本无法运行-我只将html页面读为纯文本,并且已经具有有关IE的通知

所以想知道如果我使cUrl请求出错了怎么办?我写了新的PHP脚本来显示请求标头,这是源代码:

head.php

<?php

foreach (getallheaders() as $name => $value) 
{
echo "$name: $value\n";
}

?>

postcross('http://mysite/head.php',encodeURIComponent('loginandpassord'),'vskcookies.txt',function(e){ document.getElementById('container').innerText=e.responseText; })的结果:

Host: my site
User-Agent: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Trident/7.0; Touch; .NET4.0C; .NET4.0E; Tablet PC 2.0)"
Accept: */*
Content-Type: application/x-www-form-urlencoded
Referer: mysite/head
X-1gb-Client-Ip: my ip
X-Forwarded-For: ip, ip, ip
X-Forwarded-Port: 443
X-Forwarded-Proto: https
X-Port: 443
Accept-Encoding: gzip
X-Forwarded-URI: /head
X-Forwarded-Request: POST /head HTTP/1.1
X-Forwarded-Host: my site
X-Forwarded-Server: my site
Content-Length: 823
Connection: close

由于某种原因,没有Cookie:参数,但是用户代理就是我提到的IE。

我也尝试将head.php源替换为

print_r($_COOKIE);

并得到空数组:

enter image description here

我做错什么了吗,还是网站受到机器人保护?


更新1

仅当它们通过CURLOPT_COOKIE时才显示cookie。

所以我想我会保留CURLOPT_COOKIEFILE => $cook;的原样,而对于CURLOPT_COOKIE之类的file_get_contents($cook)来说,尽管有无用的信息。保护?


重要更新2

好吧,可能我只是愚蠢。响应html页面确实包含有关IE和错误cookie的消息,但是它们位于display:none的div中,并由js显示。

因此,似乎我的尝试由于其他原因而失败。

0 个答案:

没有答案