OAuth, PHP, Rest API y curl dan 400 Solicitud incorrecta

Conseguimos un par de aplicaciones, utilizando la API car2go Rest con OAuth 1.0.

Todas nuestras aplicaciones web dejaron de funcionar hace 2 días. Todas las solicitudes POST curl están fallando ahora con el siguiente error:

 400 Bad Request Your browser sent a request that this server could not understand. Error code: 53 Parser Error: [Content-Length: -] 

Paso mucho tiempo tratando de averiguar si el problema es mi propio flujo de trabajo. Pero al final todos los parámetros y firmas son correctos. Disparo exitosamente el POST través de Postman (REST-Client)

Así que mi conclusión es que, de alguna manera, el código php para el rizo de repente ya no funciona.

Esta es la función de rizo (muy fea). Una diferencia para la mayoría de los tutoriales sobre curl POST es que estoy pasando una URL completa con todos los parámetros ya adjuntos, por lo que no necesito CURLOPT_POSTFIELDS .

 function curlAPI($params) { //open connection $ch = curl_init(); $url = $params['url']; curl_setopt($ch,CURLOPT_HEADER,false); //set the url, number of POST vars, POST data curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true); curl_setopt($ch, CURLOPT_MAXREDIRS,50); curl_setopt($ch, CURLOPT_TIMEOUT_MS, 5000); if($params['type'] == 'POST') { // POST curl_setopt($ch,CURLOPT_POST, true); } else if($params['type'] == 'DELETE') { // DELETE curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE"); } else if($params['type'] == 'PUT') { $update_json = array(); // PUT curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_POSTFIELDS,''); } else { // GET curl_setopt($ch,CURLOPT_POST,0); } curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //execute post $result['result'] = curl_exec($ch); // debug if (FALSE === $result['result']) { $result['errorInfo'] = curl_error($ch).' - '.curl_errno($ch); } $reponseInfo = array(); $reponseInfo['info'] = curl_getinfo($ch); $reponseInfo['error'] = curl_error($ch); //close connection curl_close($ch); $result['reponseInfo'] = $reponseInfo; return json_encode($result); } 

Ok, esto es lo que arregló esta pesadilla:

 curl_setopt($ch,CURLOPT_HTTPHEADER ,array('Content-Length: 0')); 

Actualmente no está bien enviar un POST rizo sin un encabezado.