msinternet Posted August 19, 2009 Share Posted August 19, 2009 Hi brainy ones, I am having a real problem with a cURL script. I based it on something that worked in another site but this is failing. The idea is a registration form is filled in on one page and the data is sent via cURL to register you in another system. If I run the script I get an output of the form as if I had not sent any post data but I am sure I have done this correctly. I set the content type etc. but it just will not work. If I complete the form that is returned it works fine. The site I am posting to tries to set a cookie but I think I am handling this correctly and I have echoed my NVP string and that looks fine. My code is: $post = "ddlLearnerGroups=" . urlencode($_POST['group']) . "&auth=" . urlencode($_POST['auth']) . "&txtLogin=" . urlencode($_POST['username']) . "&txtPassword=" . urlencode($_POST['password']) . "&txtCPassword=" . urlencode($_POST['password2']) . "&txtFName=" . urlencode($_POST['fname']) . "&txtLName=" . urlencode($_POST['sname']) . "&txtEmail=" . urlencode($_POST['email']) . "&txtPhone=" . urlencode($_POST['phone']) . "&txtQuestion=" . urlencode($_POST['secretquestion']) . "&txtAnswer=" . urlencode($_POST['secretanswer']) . "&btnSubmit.x=46&btnSubmit.y=13"; $url = "http://www.example.com/directory/Registration.aspx"; $header = array("POST /directory/Registration.aspx HTTP/1.1", "Host: www.example.com", "Connection: close", "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", "Accept-Encoding: gzip", "Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7", "Cache-Control: no", "Accept-Language: de,en;q=0.7,en-us;q=0.3", "Referer: http://www.example.co.uk/", "Content-type: application/x-www-form-urlencoded", "Content-length: 0" ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_VERBOSE,1); curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies.txt"); curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,$post); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_REFERER, 'http://www.example.com/directory/'); //curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $curlres = curl_exec($ch); The return headers are: HTTP/1.1 200 OK Connection: close Date: Wed, 19 Aug 2009 17:10:46 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 1.1.4322 Cache-Control: private Content-Type: text/html; charset=utf-8 Content-Length: 18329 I really need to get this working ASAP but I am stumped. Thanks in advance. Martin Quote Link to comment Share on other sites More sharing options...
msinternet Posted August 19, 2009 Author Share Posted August 19, 2009 I wondered if there might be something to do with the form I am trying to mimic being ASP.NET. I know this forum is probably more php guys but someone might be able to give me a clue. Thanks all Quote Link to comment Share on other sites More sharing options...
msinternet Posted August 20, 2009 Author Share Posted August 20, 2009 Hi all, Looks like I beat you all to it! The problem was that the ASP.NET form uses a __VIEWSTATE in the form which is like a rubbishly implemented session identifier. So you have to initiate a session, get the viewstate and then add that to the post data. I did this by doing a cURL request, trimming down to the value and then performing a second cURL data submission. Works like a treat! I hope someone finds this helpful anyway, Martin Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.