I'm having some troubles can't post article content via API that is bigger than ~5420 bytes. 5420 bytes works, but 5454 bytes fails. And the problem is that I don't get any result or error message back.
Anyone had similar problems? Is there some general size limit for posting through the API, that I'm exceeding? (Strange though that I don't get an error message)
More detailed info: I'm using PHP Version 5.2.4-2ubuntu5.5 with cURL Post max size in php.ini is 16M
I'm using the cURL handle class below (The functions "cURLHandle" (constructor) and "post" should be the ones relevant here). As you can see the timeout is set to 30 seconds ("curl_setopt($process, CURLOPT_TIMEOUT, 30);" in the post function), but it doesn't take more than merely a second or so before the execution ends.
class cURLHandle { var $headers; var $user_agent; var $compression; var $cookie_file; var $proxy; function cURLHandle($cookies=TRUE,$cookie='./cookies/cookies.txt',$compression='gzip',$proxy='') { $this->headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg'; $this->headers[] = 'Connection: Keep-Alive'; $this->headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8'; $this->user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'; $this->compression=$compression; $this->proxy=$proxy; $this->cookies=$cookies; if ($this->cookies == TRUE) $this->cookie($cookie); } function cookie($cookie_file) { if (file_exists($cookie_file)) { $this->cookie_file=$cookie_file; } else { fopen($cookie_file,'w') or $this->error('The cookie file could not be opened. Make sure this directory has the correct permissions'); $this->cookie_file=$cookie_file; fclose($this->cookie_file); } } function get($url) { $process = curl_init($url); curl_setopt($process, CURLOPT_HTTPHEADER, $this->headers); curl_setopt($process, CURLOPT_HEADER, 0); curl_setopt($process, CURLOPT_USERAGENT, $this->user_agent); if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEFILE, $this->cookie_file); if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEJAR, $this->cookie_file); curl_setopt($process,CURLOPT_ENCODING , $this->compression); curl_setopt($process, CURLOPT_TIMEOUT, 30); if ($this->proxy) curl_setopt($cUrl, CURLOPT_PROXY, 'proxy_ip:proxy_port'); curl_setopt($process, CURLOPT_RETURNTRANSFER, 1); curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1); $return = curl_exec($process); curl_close($process); return $return; } function post($url,$data) { $process = curl_init($url); curl_setopt($process, CURLOPT_HTTPHEADER, $this->headers); curl_setopt($process, CURLOPT_HEADER, 0); // Don't give us the headers curl_setopt($process, CURLOPT_USERAGENT, $this->user_agent); if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEFILE, $this->cookie_file); if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEJAR, $this->cookie_file); curl_setopt($process, CURLOPT_ENCODING , $this->compression); curl_setopt($process, CURLOPT_TIMEOUT, 30); if ($this->proxy) curl_setopt($process, CURLOPT_PROXY, $this->proxy); curl_setopt($process, CURLOPT_POSTFIELDS, $data); curl_setopt($process, CURLOPT_RETURNTRANSFER, 1); curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($process, CURLOPT_POST, 1); $return = curl_exec($process); curl_close($process); return $return; } function error($error) { echo "<center><div style='width:500px;border: 3px solid #FFEEFF; padding: 3px; background-color: #FFDDFF;font-family: verdana; font-size: 10px'><b>cURL Error</b><br>$error</div></center>"; die; } }
Regards // Samuel Lampa RIL Partner AB | http://www.rilnet.com
Oh, and I'm using MediaWIki 1.14.0 (r194) and Apache 2.
// Samuel
Samuel Lampa skrev:
I'm having some troubles can't post article content via API that is bigger than ~5420 bytes. 5420 bytes works, but 5454 bytes fails. And the problem is that I don't get any result or error message back.
Anyone had similar problems? Is there some general size limit for posting through the API, that I'm exceeding? (Strange though that I don't get an error message)
More detailed info: I'm using PHP Version 5.2.4-2ubuntu5.5 with cURL Post max size in php.ini is 16M
I'm using the cURL handle class below (The functions "cURLHandle" (constructor) and "post" should be the ones relevant here). As you can see the timeout is set to 30 seconds ("curl_setopt($process, CURLOPT_TIMEOUT, 30);" in the post function), but it doesn't take more than merely a second or so before the execution ends.
class cURLHandle { var $headers; var $user_agent; var $compression; var $cookie_file; var $proxy; function cURLHandle($cookies=TRUE,$cookie='./cookies/cookies.txt',$compression='gzip',$proxy='') { $this->headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg'; $this->headers[] = 'Connection: Keep-Alive'; $this->headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8'; $this->user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'; $this->compression=$compression; $this->proxy=$proxy; $this->cookies=$cookies; if ($this->cookies == TRUE) $this->cookie($cookie); } function cookie($cookie_file) { if (file_exists($cookie_file)) { $this->cookie_file=$cookie_file; } else { fopen($cookie_file,'w') or $this->error('The cookie file could not be opened. Make sure this directory has the correct permissions'); $this->cookie_file=$cookie_file; fclose($this->cookie_file); } } function get($url) { $process = curl_init($url); curl_setopt($process, CURLOPT_HTTPHEADER, $this->headers); curl_setopt($process, CURLOPT_HEADER, 0); curl_setopt($process, CURLOPT_USERAGENT, $this->user_agent); if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEFILE, $this->cookie_file); if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEJAR, $this->cookie_file); curl_setopt($process,CURLOPT_ENCODING , $this->compression); curl_setopt($process, CURLOPT_TIMEOUT, 30); if ($this->proxy) curl_setopt($cUrl, CURLOPT_PROXY, 'proxy_ip:proxy_port'); curl_setopt($process, CURLOPT_RETURNTRANSFER, 1); curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1); $return = curl_exec($process); curl_close($process); return $return; } function post($url,$data) { $process = curl_init($url); curl_setopt($process, CURLOPT_HTTPHEADER, $this->headers); curl_setopt($process, CURLOPT_HEADER, 0); // Don't give us the headers curl_setopt($process, CURLOPT_USERAGENT, $this->user_agent); if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEFILE, $this->cookie_file); if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEJAR, $this->cookie_file); curl_setopt($process, CURLOPT_ENCODING , $this->compression); curl_setopt($process, CURLOPT_TIMEOUT, 30); if ($this->proxy) curl_setopt($process, CURLOPT_PROXY, $this->proxy); curl_setopt($process, CURLOPT_POSTFIELDS, $data); curl_setopt($process, CURLOPT_RETURNTRANSFER, 1); curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($process, CURLOPT_POST, 1); $return = curl_exec($process); curl_close($process); return $return; } function error($error) { echo "<center><div style='width:500px;border: 3px solid #FFEEFF; padding: 3px; background-color: #FFDDFF;font-family: verdana; font-size: 10px'><b>cURL Error</b><br>$error</div></center>"; die; } }
Regards // Samuel Lampa RIL Partner AB | http://www.rilnet.com
Mediawiki-api mailing list Mediawiki-api@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-api
On Fri, Apr 17, 2009 at 3:57 PM, Samuel Lampa samuel.lampa.l@rilnet.com wrote:
I'm having some troubles can't post article content via API that is bigger than ~5420 bytes. 5420 bytes works, but 5454 bytes fails. And the problem is that I don't get any result or error message back.
Anyone had similar problems? Is there some general size limit for posting through the API, that I'm exceeding? (Strange though that I don't get an error message)
This might be due to the Squid changes detailed at https://secure.wikimedia.org/wikipedia/en/wiki/Wikipedia:Bot_owners%27_notic...
You are probably receiving a 417 HTTP header in return.
Try adding "Expect:" to your array of HTTP headers, so the following needs to go in cURLHandle():
$this->headers[] = 'Expect:';
Sam
Thanks for your quick response. I forgot to say though that I'm not actually connecting against Wikipedia servers, but my own server.
I found the problem as well: I'm using the Tooltip extension, and it turns out that adding too many tooltips is what made the server stop responding, not the article size per se. Probably the parsing of the tooltips are somewhat resource intensize. Posting without any tooltip code works fine with far greater article sizes.
Regards // Samuel
Sam Korn skrev:
On Fri, Apr 17, 2009 at 3:57 PM, Samuel Lampa samuel.lampa.l@rilnet.com wrote:
I'm having some troubles can't post article content via API that is bigger than ~5420 bytes. 5420 bytes works, but 5454 bytes fails. And the problem is that I don't get any result or error message back.
Anyone had similar problems? Is there some general size limit for posting through the API, that I'm exceeding? (Strange though that I don't get an error message)
This might be due to the Squid changes detailed at https://secure.wikimedia.org/wikipedia/en/wiki/Wikipedia:Bot_owners%27_notic...
You are probably receiving a 417 HTTP header in return.
Try adding "Expect:" to your array of HTTP headers, so the following needs to go in cURLHandle():
$this->headers[] = 'Expect:';
Sam
mediawiki-api@lists.wikimedia.org