努力用PHP抓住asp.net

前端之家收集整理的这篇文章主要介绍了努力用PHP抓住asp.net前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图使用 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);

在浏览器中,事件序列如下:

> 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),没有任何影响.

我的问题是我不明白 curl只会向COOKIEJAR写入cookie而只能从COOKIEFILE读取.事实上,如果它们不在服务器的最后一个响应中,它似乎从COOKIEJAR中删除了cookie(仍然没有完全描述它).
原文链接:https://www.f2er.com/php/134077.html

猜你在找的PHP相关文章