Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

php cURL - The request must be chunked or have a content length

Tags:

php

curl

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.

like image 246
Pedro Gabriel Avatar asked Oct 09 '22 18:10

Pedro Gabriel


1 Answers

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'); 
like image 50
Len Avatar answered Oct 13 '22 12:10

Len