我们使用了带有OAuth 1.0 的car2go Rest- API的几个应用程序。
我们所有的网络应用都在2天前停止工作。curl POST现在,所有请求都失败,并显示以下错误:
curl
POST
400 Bad Request Your browser sent a request that this server could not understand. Error code: 53 Parser Error: [Content-Length: -]
我花费大量时间试图找出问题是否出在我的oauth工作流程上。但是最后所有参数,签名和内容都是正确的。我成功地POST通过via 邮递员(REST客户端)
所以我的结论是,curl的php代码突然不再起作用了。
这是(非常难看)卷曲功能。与大多数有关curl POST的教程不同的是,我传递的是已附加所有参数的完整URL,因此我不需要CURLOPT_POSTFIELDS。
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); }
好的,这是解决此噩梦的方法:
curl_setopt($ch,CURLOPT_HTTPHEADER ,array('Content-Length: 0'));
另外,发送POST没有标题的curl 也不行。