我试图使用
PHP(5.6)和libcurl废弃网站.
原文链接:https://www.f2er.com/php/134077.html该站点在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);
在浏览器中,事件序列如下:
> GET /结果302重定向到/Login.aspx?ReturnUrl=/Index.aspx
>重定向位置返回的登录页面
>用户输入用户名和密码,然后点击提交类型的输入
>用户名,密码,提交和2个隐藏输入(__VIEWSTATE和__VIEWSTATEGENERATOR)被POST回到相同的URL(/Login.aspx?ReturnUrl=/Index.aspx)
>服务器响应302重定向到/Index.asp
>浏览器检索Index.asp(作为经过身份验证的用户)
但是,当我使用PHP脚本尝试此操作时,在步骤4之后,响应是步骤2.
我已经尝试将脚本指向本地非SSL网站,以检查Curl是否正在按照我的预期进行操作.它是.
分析
>正在捕获和重播Cookie
>正在填充所有必需的变量(包括__VIEWSTATE和__VIEWSTATEGENERATOR)并在POST中发回
>内容未被缓存 – 在GET和POST之间插入人为延迟会导致响应的时间戳不同
>虽然会话似乎正在运行,但是服务器响应就像POST是没有参数的GET一样 – 如果浏览器中提供了无效的用户名或密码,响应也不同,但GET和POST的抓取都返回相同的HTML.
我尝试添加浏览器中生成的所有额外标头(User-Agent,Accept,Accept-Language),没有任何影响.