5

today I was trying something using 'lib cURL' when I got this weird error, I cannot found a solution for this, can you help me to figure it out?

<?php set_time_limit(0); class cURL { var $content; var $cookie; var $headers = array(); var $ch; var $data; var $info; var $httpcode; var $proxy_ip; var $proxy_port; var $cookie_f; function __construct($cookie = '') { if (!empty($cookie)) { $this->cookie_f = $cookie; } } function setproxy($proxy) { list($ip, $porta) = explode(":", $proxy); $this->proxy_ip = $ip; $this->proxy_port = $porta; } function setcookie($cookie) { $this->cookie = $cookie; } function open($type, $url) { $this->ch = curl_init(); curl_setopt($this->ch, CURLOPT_URL, $url); curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($this->ch, CURLOPT_HEADER, true); //curl_setopt($this->ch, CURLOPT_HTTPHEADER, array("Content-type: application/x-www-form-urlencoded", "Content-length: 216")); curl_setopt($this->ch, CURLOPT_ENCODING, ""); curl_setopt($this->ch, CURLOPT_COOKIEFILE, getcwd() . '/cookies.cookie'); curl_setopt($this->ch, CURLOPT_COOKIEJAR, getcwd() . '/cookies.cookie'); curl_setopt($this->ch, CURLOPT_USERAGENT, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.9.2.18) Gecko/20110614 Firefox/3.6.18"); if (strtolower($type) == 'post') { curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($this->ch, CURLOPT_POST, 1); curl_setopt($this->ch, CURLOPT_POSTFIELDS, $this->data); curl_setopt($this->ch, CURLOPT_HEADER, true); } $this->content = curl_exec($this->ch); curl_close($this->ch); return $this->content; } } ?> <?php $curll = New cURL; $curll ->setCookie = "cookies.cookie"; $curll ->data = "username=user&password=pass&IsSyncUp=&FacebookAssociation=&SNAccessToken="; $curll ->open("POST", "http://www.website.com"); $curll ->data = '__EVENTTARGET=ctl00$ctl00$cphRoblox$cphMyRobloxContent$lbSend&ctl00$ctl00$cphRoblox$cphMyRobloxContent$rbxMessageEditor$txtSubject=AAAAAAAAA&ctl00$ctl00$cphRoblox$cphMyRobloxContent$rbxMessageEditor$txtBody=BBBBBBBBB'; $curll ->open("POST", "http://www.website.com/My/PrivateMessage.aspx?RecipientID=20815603"); echo $curll ->content; ?> 

So, my returned error was:

HTTP/1.1 302 Found Cache-Control: private Content-Type: text/html; charset=utf-8 Location: /Login/Default.aspx?ReturnUrl=%2fMy%2fPrivateMessage.aspx%3fRecipientID%3d20815603&RecipientID=20815603 Server: Microsoft-IIS/7.0 Set-Cookie: rbx-ip=; path=/; HttpOnly Set-Cookie: RBXSource=rbx_acquisition_time=10/14/2011 3:32:12 PM&rbx_acquisition_referrer=http://www.website.com/My/PrivateMessage.aspx?RecipientID=20815603&rbx_medium=Direct&rbx_source=www.website.com&rbx_campaign=&rbx_send_info=0; expires=Sun, 13-Nov-2011 21:32:12 GMT; path=/ X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET P3P: CP="CAO DSP COR CURa ADMa DEVa OUR IND PHY ONL UNI COM NAV INT DEM PRE" Date: Fri, 14 Oct 2011 20:32:12 GMT Content-Length: 224 HTTP/1.1 411 Length Required Content-Type: text/html; charset=us-ascii Server: Microsoft-HTTPAPI/2.0 Date: Fri, 14 Oct 2011 20:32:12 GMT Connection: close Content-Length: 344
Length Required HTTP Error 411. The request must be chunked or have a content length.

So my problem was "The request must be chunked or have a content length." My POST was made by consulting browser post using 'Live HTTP Headers' (Mozila)

If I comment the seconds data & open/post it works fine. The seconds data and open/post was the problem.

Can anybody help me? Thanks for reading.

1
  • FYI: CURLOPT_CUSTOMREQUEST is for requests OTHER than post/get. It's for when you need to do HEAD, PUT, etc... using CURLOPT_POST already puts curl into post mode. Commented Oct 14, 2011 at 21:33

2 Answers 2

2

It is hard to know exactly what is being sent unless you see the actual data that is being passed.

Download the fiddler web proxy and compare the exact browser output with curl.

http://www.fiddler2.com/fiddler2/

add this line of PHP code to pass curl thru fiddler.

curl_setopt($ch, CURLOPT_PROXY, '127.0.0.1:8888'); 
Sign up to request clarification or add additional context in comments.

5 Comments

I know the passed data, Live HTTP Headers show the post data and it was exactly like my 'data' post, anyway I'll try to see your fiddler Ah I think I got what you mean now...
WHat should I see in the fiddler results? the current request part where has stopped?
click on the request you are interested in and look on the right side under RAW or HEXVIEW. Make sure they match for both curl and the browser.
They match, but when the last request end auto start another request (not made by me) going to error page, maybe that's the point. I'll try disable redirections to see the result.
Thanks for the way to see the request in Fiddler! Still works with Fiddler 4.
2

Set the content-length header to the length of the data you are sending. See http://www.php.net/manual/en/function.curl-setopt.php#80271 for an example.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.