尝试使用PHP和cURL登录到ASPX网站

尝试使用PHP和cURL登录到ASPX网站,php,asp.net,curl,Php,Asp.net,Curl,几天来,我一直在尝试使用cURL登录到一个特定的网站 该网站是用ASP.net编写的,我使用的是PHP5.x 以下是我迄今为止所做的尝试,但没有成功: $url = "https://intouch.techdata.com/default.aspx?countrycode=&CssStyleSheet=default.css&CultureCode=&local_url=&MPSearchId=&Culture=&cos="; $

几天来,我一直在尝试使用cURL登录到一个特定的网站

该网站是用ASP.net编写的,我使用的是PHP5.x

以下是我迄今为止所做的尝试,但没有成功:

    $url = "https://intouch.techdata.com/default.aspx?countrycode=&CssStyleSheet=default.css&CultureCode=&local_url=&MPSearchId=&Culture=&cos=";
    $cookie_file_path = 'cookies.txt';
    $agent = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36";

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);         
    curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); 
    curl_setopt($ch, CURLOPT_POSTREDIR, 2);
    curl_setopt($ch, CURLOPT_SSLVERSION, 3);
    curl_setopt($ch, CURLOPT_POST, 1); 

    $post_data['__VIEWSTATE'] = "/wEPDwUKLTg1MDYwODIwOA9kFgRmDxYCHgRocmVmBRcvaW1hZ2VzL2RlZmF1bHQuY3NzP3Y9M2QCAQ9kFhgCAw8PFgIeBFRleHQFKldlbGNvbWUgdG8gdGhlIE9ubGluZSBQcm9kdWN0IENhdGFsb2d1ZSBvZmRkAgUPDxYCHwEFIVJlZ2lzdGVyZWQgdXNlcnMgZW
    50ZXIgPGJyPiBoZXJlOmRkAgsPFgIeB1Zpc2libGVoFgICAQ8PFgIfAQUJUGFzc3dvcmQ6ZGQCDQ8PZBYCHgxhdXRvY29tcGxldGUFA29mZmQCDw8PFgIfAQUPQWNjb3VudCBOdW1iZXI6ZGQCEQ8PFgIfAQUJVXNlcm5hbWU6ZGQCEw8PFgIfAQUJUGFzc3dvcmQ6ZGQCFQ8PFgIfAQUFTG9naW4WAh4H
    b25jbGljawWaAWphdmFzY3JpcHQ6cmV0dXJuIFZhbGlkYXRvcignVXNlcm5hbWU6JywnUGxlYXNlIGVudGVyIGFuIGFjY291bnQgbnVtYmVyJywnUGxlYXNlIGVudGVyIHlvdXIgdXNlcm5hbWUnLCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBwYXNzd29yZCcsJzAnKTtkAhcPDxY
    CHwEFBUxvZ2luFgIfBAWaAWphdmFzY3JpcHQ6cmV0dXJuIFZhbGlkYXRvcignVXNlcm5hbWU6JywnUGxlYXNlIGVudGVyIGFuIGFjY291bnQgbnVtYmVyJywnUGxlYXNlIGVudGVyIHlvdXIgdXNlcm5hbWUnLCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBwYXNzd29yZCcsJzAnKT
    tkAhkPDxYCHwEFBVJlc2V0FgIfBAUcamF2YXNjcmlwdDpyZXR1cm4gZm5SZXNldCgpO2QCHQ8PFgIfAQUOUGFzc3dvcmQgbG9zdD8WBB8EBZoBamF2YXNjcmlwdDpyZXR1cm4gVmFsaWRhdG9yKCdVc2VybmFtZTonLCdQbGVhc2UgZW50ZXIgYW4gYWNjb3VudCBudW1iZXInLCdQbGVhc2UgZW50ZXIgeW
    91ciB1c2VybmFtZScsJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkJywnMScpOx8ABTRqYXZhc2NyaXB0OmdvKCdERUZBVUxUQ2hwLkNTUycsJycsJ2RlZmF1bHQuY3NzJywnJyk7ZAIfDw8WBB8BBRBCZWNvbWUgYSBQYXJ0bmVyHwJoFgIfAAU0amF2YXNjcmlwdDpCZW
    NvbWVBUGFydG5lcigncD1CZWNvbWVQYXJ0bmVyJmM9SG9tZScpO2RkxaBIRC+v+vJslZdN4xAvkZL9HCY=";
    $post_data['__EVENTVALIDATION='] = "/wEWEALxt7yuBwKs+5bqDwKl1bKzCQK1qbSRCwLFp6CQBwLCi9reAwKgt7D9CgKY5fiZAQLnxpq/AgKT2dzTDQK7hrWFCgKsuviBAQLnw+O9BAKywsaqBgL43fTxBQLonLasDzE6BdS22kepzqbhlPQS//T5e2ty";
    $post_data['txtID'] = 'idnumber';
    $post_data['txtUserName'] = 'username';
    $post_data['txtDupPassword'] = 'password';
    $post_data['Session_ID'] = '';
    $post_data['sessionid'] = '';
    $post_data['errorCode'] = '';
    $post_data['hdnSavedSearch'] = '';
    $post_data['hdnProdIds'] = '';
    $post_data['hdnMPSearchId'] = '';
    $post_data['hdnDisplaytype'] = '';
    $post_data['hdnMode'] = '';
    $post_data['hdnProductid'] = '';
    $post_data['hdnQuantity'] = '';
    $post_data['hdnBanner'] = '';
    $post_data['cos'] = '';
    $post_data = http_build_query($post_data);
            curl_setopt( $ch, CURLOPT_POSTFIELDS, $post_data);

            $out = curl_exec($ch);
            echo $out;
问题是我得到了一个服务器运行时错误作为响应。我真的不知道我应该如何形成url。有什么帮助吗

提前感谢

编辑: 下面是另一篇关于卷曲的帖子:

我不确定使用curl可以如何做到这一点,但将凭据发布到网站以进行登录相对容易。关于此事,请参阅以下帖子:

过程如下所示:

(1) 向网页发出GET请求 (2) 从收到的响应中获取_uviewstate (3) 使用以下格式附加的所需凭据发布到url:

yourtargetwebsiteaddress.com/targetloginpage?__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE={VS}&__EVENTVALIDATION={EV}&{UserNameControl}={UN}&{PasswordControl}={PW}
在哪里

  • {VS}
    是初始请求的视图状态
  • {EV}
    是初始请求的事件验证
  • {UserNameControl}
    是用户名控件的id,
    {UN}
    是您要发布的用户名
  • {PasswordControl}
    是网页上密码控件的id,
    {PW}
    是您要发布的密码

您的运行时错误是什么?感谢您的回答这是错误:“/”应用程序中的服务器错误。运行时错误描述:服务器上发生应用程序错误。此应用程序的当前自定义错误设置阻止远程查看应用程序错误的详细信息(出于安全原因)。但是,本地服务器上运行的浏览器可以查看它。详细信息:要启用此特定错误消息的详细信息,beThat是默认的ASP.NET错误页-您需要关闭Web.Config中的自定义错误以查看真正的错误,这可能会让您更好地了解问题谢谢,但我没有访问服务器配置的权限。我只有一个可以用来登录的登录帐户,它可以通过web浏览器正常工作。“txtdupassword”参数是什么?这不应该仅仅是“txtPassword”吗?我正是按照你的例子和上面你链接的帖子所说的那样做的。问题是这个站点需要3个凭据,而不仅仅是2个。我确实把他们三个都寄到了表格里,但它仍然不起作用。使用fiddler,我注意到在手动按login之后出现的第一件事是一个名为redirectpage.aspx的页面。但是cURL不应该在重定向时自动处理这个问题吗?您为它设置了选项吗?我不完全确定它应该如何工作。是的,这就是curl_setopt的目的($ch,CURLOPT_POSTREDIR,2);它重定向302个请求。我建议在一个更简单的站点上进行练习,您可以进行配置(这样您就可以详细查看错误消息)。否则,继续用你的头撞墙,直到出现一个开口。我想我找到了这个原因。。。使用Fiddler,我注意到所有重定向都指向localhost,而不是代码中链接中的域。看起来javascript重定向打破了这个旋度。有什么建议吗?我是否应该尝试使用另一种语言(如python)来实现这一点?