rationalboss
asked on
php curl 413 error
Hi,
When using curl in PHP I get 413 errors. Why is that?
It's also weird because the script works on my PHP Version 5.3.1 (cURL Information 7.19.6)
but it doesn't work on:
PHP Version 5.2.9 (cURL Information libcurl/7.21.4 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5)
When using curl in PHP I get 413 errors. Why is that?
It's also weird because the script works on my PHP Version 5.3.1 (cURL Information 7.19.6)
but it doesn't work on:
PHP Version 5.2.9 (cURL Information libcurl/7.21.4 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5)
<?php
class RegAppAPI {
private $APIUsername;
private $APIPassword;
private $APIUrl;
private $APIContents; //array
private $curlHandle;
private $sessionInfo;
private $lastError;
private $rawData;
function __construct($service_list, $username, $password) {
$this->APIUsername=$username;
$this->APIPassword=$password;
//setup common cUrl properties
$this->curlHandle = curl_init();
curl_setopt($this->curlHandle, CURLOPT_HTTPAUTH, CURLAUTH_BASIC ) ;
curl_setopt($this->curlHandle, CURLOPT_USERPWD, "$username:$password");
curl_setopt($this->curlHandle, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($this->curlHandle, CURLOPT_SSLVERSION,3);
curl_setopt($this->curlHandle, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($this->curlHandle, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($this->curlHandle, CURLOPT_HEADER, false);
curl_setopt($this->curlHandle, CURLOPT_POST, true);
curl_setopt($this->curlHandle, CURLOPT_RETURNTRANSFER, true);
if (gettype($service_list)=="string") {
$this->APIUrl = $service_list;
$ret = $this->_initAPIContents();
if (!$ret) {
unset($this);
}
} else if (gettype($service_list)=="object") {
$this->APIContents = $service_list;
}
}
function _initAPIContents() {
curl_setopt($this->curlHandle, CURLOPT_URL, $this->APIUrl);
$val = curl_exec($this->curlHandle);
if (curl_error($this->curlHandle)) {
if (curl_error($this->curlHandle)) $this->lastError = curl_error($this->curlHandle);
return FALSE;
}
$responseCode = curl_getinfo($this->curlHandle,CURLINFO_HTTP_CODE);
if ($responseCode == 401) {
$this->lastError = "Client Request Error ($responseCode) Unauthorized connection. Your API username and password is incorrect.";
return FALSE;
} else
if ($responseCode >= 400 && $responseCode < 500) {
$this->lastError = "Client Request Error ($responseCode).";
return FALSE;
} else
if ($responseCode >=500) {
$this->lastError = "Server error ($responseCode)." ;
return FALSE;
}
$this->APIContents = json_decode($val);
if (function_exists('json_last_error')) {
if (json_last_error() ) {
$this->lastError = json_last_error();
return FALSE;
}
}
return TRUE;
}
function execute($name, $params=array(), $optional_params = array()) {
$this->lastError = NULL;
if (!isset($this->APIContents->{$name})) {
$this->lastError = "Service/Operation named '$name' is not initialized.";
return FALSE;
}
$operation = $this->APIContents->{$name};;
$POST_DATA = array();
$sess_info = $this->getSessionInfo();
if (!$sess_info && $operation->session_info_required) {
$this->lastError='There is no session information associated with this object.';
return FALSE;
}
if ($sess_info != NULL) {
foreach ($sess_info as $key=>$value) {
$POST_DATA[$key] = $value;
}
}
if (isset($operation->parameters)) {
foreach ($operation->parameters as $param) {
if (isset($params[$param])) {
$POST_DATA[$param] = $params[$param];
} else {
$this->lastError='Request has missing parameter ' . $param . '.';
return FALSE;
}
}
}
if (isset($operation->optionalParameters)) {
foreach ($operation->optionalParameters as $param) {
if (isset($optional_params[$param])) $POST_DATA[$param]=$optional_params;
}
}
$postString = http_build_query($POST_DATA,'','&');
curl_setopt($this->curlHandle, CURLOPT_URL, $operation->url);
curl_setopt($this->curlHandle, CURLOPT_POSTFIELDS, $postString);
$val = curl_exec($this->curlHandle);
$this->rawData=$val;
$responseCode = curl_getinfo($this->curlHandle,CURLINFO_HTTP_CODE);
if ($responseCode == 401) {
$this->lastError = "Client Request Error ($responseCode) Unauthorized connection. Your API username and password is incorrect.";
return FALSE;
} else
if ($responseCode >= 400 && $responseCode < 500) {
$this->lastError = "Client Request Error ($responseCode).";
return FALSE;
} else
if ($responseCode >=500) {
$this->lastError = "Server error ($responseCode)." ;
return FALSE;
}
//echo curl_error($this->curlHandle) . "<br/>";
$result = json_decode($val);
if (function_exists('json_last_error')) {
if (json_last_error()) {
$this->lastError = "Error in decoding response: $val";
return FALSE;
}
}
if ($result) {
if (isset($result->{'session_info'})) {
$this->sessionInfo = $result->{'session_info'};
$this->lastError = NULL;
return TRUE;
}
if (isset($result->{'result'})) {
$this->lastError = NULL;
return $result->{'result'};
}
if (isset($result->{'error'})) {
$this->lastError = NULL;
$this->_processError($result->{'error'});
return FALSE;
}
}
return FALSE;
}
function getRawData() {
return $this->rawData;
}
function _processError($error) {
$this->lastError = $error->{'message'};
}
function getLastError() {
return $this->lastError;
}
function setSessionInfo($sess_info) {
$this->sessionInfo = $sess_info;
}
function getSessionInfo() {
if ($this->sessionInfo) return $this->sessionInfo;
}
function close() {
curl_close($this->curlHandle);
}
function getAPIContents() {
//$copy = array();
//foreach ($this->APIContents as $index=>$content) $copy[$index] = $content;
return $this->APIContents;
}
function showAPIContents() {
print "<h2>RegApp API Contents</h2>";
if ($this->APIContents) {
foreach ($this->APIContents as $name=>$details) {
$content = "<div>";
$content .= "<p><u><b>$name</b></u></p>";
$content .= "<p><b>Description: </b> " . $details->{'description'} . "<br/>" ;
$content .= "<b>Session Info Required :</b> " . (($details->{'session_info_required'}) ? "YES" : "NO") . "<br/>";
$content .= "<b>Parameters : </b> " . ((isset($details->{'parameters'}) && count($details->{'parameters'}) > 0) ? implode(", " , $details->{'parameters'}) : "NONE") . "<br/>";
$content .= "<b>Optional Parameters : </b> " . ((isset($details->{'optionalParameters'}) && count($details->{'optionalParameters'}) > 0) ? implode(", " , $details->{'optionalParameters'}) : "NONE") . "<br/>";
$content .= "<b>Returns: </b> " . $details->{'returns'} . "<br/>";
$content .= "</div>";
echo $content;
}
} else echo "<p>API has no contents.</p>";
}
}
?>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
i solved it myself
http://code.google.com/p/twitter-api/issues/detail?id=1291
Another post shows that there was a bug in the curl_wrappers below PHP 5.2.11, so it would be a good idea to update to the most recent PHP 5.2.17:
http://core.trac.wordpress.org/ticket/11888 (see comment 28)
Good luck!