我正在尝试使用PHP(5.6)和libcurl来删除网站。
该网站在asp.net中实现,可通过本地代理访问。站点使用HTTPS,因此不容易通过线路发送未加密的流量。
我在第一步失败了 - 登录。
$curl_options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_PROXY => 'http://localproxy.example.com:8080',
CURLOPT_PROXYUSERPWD => "$proxyUser:$proxyPass",
CURLOPT_PROXYAUTH => CURLAUTH_NTLM,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_WRITEHEADER => false,
CURLOPT_COOKIEJAR => $curl_cookie_jar,
CURLOPT_COOKIEFILE => $curl_cookie_jar
);
...
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $entryurl);
curl_setopt_array($ch, $curl_options);
$reply=curl_exec($ch);
curl_close($ch);
...
$postdata=array(
'username'=>'someuser', 'password'=>'s3cr3t',
'__VIEWSTATE'=>$vstate, '__VIEWSTATEGENERATOR'=>$vsgen
);
$ch=curl_init();
curl_setopt_array($ch, $curl_options);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postdata));
$reply=curl_exec($ch);
在浏览器中,事件序列如下:
但是,当我使用PHP脚本尝试此操作时,在步骤4之后,响应是第2步。
我已尝试将脚本指向本地非SSL网站,以检查Curl是否正在按照我的预期进行操作。它是。
分析
我尝试添加浏览器中生成的所有额外标头(User-Agent,Accept,Accept-Language),但没有任何影响。
答案 0 :(得分:0)
我的问题是,我不明白curl只有将 Cookie写入COOKIEJAR而仅从COOKIEFILE读取。事实上,如果它们不是来自服务器的最后一个响应,它似乎从COOKIEJAR中删除了cookie(仍然没有完全描述它)。