我有一个用CakePHP编写的网站,需要从Veeva Vault下载文件。我从其他人那里继承了这个身份验证函数,该函数应该从Veeva返回一个会话ID,但是当它应该返回true时,它会在curl_exec()上返回false。有人告诉我这个函数在CakePHP之外使用了一个测试文件,所以我在考虑与Cake相关的东西。
private function Auth()
{
try {
$url = self::VVURL . '/auth?username=' . self::VVUSERNAME . '&password=' . self::VVPASS;
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json;charset=UTF-8"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, null);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$json_response = curl_exec($curl);
if ($json_response != true) {
throw new Exception (curl_error($curl), curl_errno($curl));
}
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if($status != 200)
{
die('Error: call to URL $url failed with status "' . $status .'", response "' . $json_response. '", curl_error "' . curl_error($curl) . '", curl_errno "' . curl_errno($curl). '"');
}
else
{
//Enable following line to DEBUG
//print_r($json_response);
}
curl_close($curl);
$return = json_decode($json_response);
foreach($return as $k => $v)
{
if($k == 'sessionId')
$this->sessID = $v;
}
return $this->sessID;
}
catch(Exception $e){
trigger_error(sprintf(
'Curl failed with error #%d: %s',
$e->getCode(), $e->getMessage()),
E_USER_ERROR);
}
}
curl_init($ url)返回资源(148,curl)。我不知道这是否正确。
curl_getinfo($ curl,CURLINFO_HTTP_CODE)返回200,所以我知道这很好。
curl_exec($ curl)返回false。
回归:
致命错误
错误:卷曲失败,错误#56:分块编码数据中的问题(2)
文件:C:\ wamp \ www \ content \ app \ Vendor \ veeva \ veeva.php
行:109
注意:如果要自定义此错误消息,请创建app \ View \ Errors \ fatal_error.ctp
不幸的是,我似乎找不到任何有用的Veeva文档。
解
我需要在运行curl_exec(),
之前添加以下curl选项curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
这返回了正确的json响应。虽然无法直接输入json_decode()并且必须进行如下编辑:
$json_utf8 = utf8_decode($json_response);
$return = json_decode(str_replace("?", "", $json_utf8));
答案 0 :(得分:4)
<强>解强>
我需要在运行curl_exec(),
之前添加以下curl选项curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
这返回了正确的json响应。虽然无法直接输入json_decode()并且必须进行如下编辑:
$json_utf8 = utf8_decode($json_response);
$return = json_decode(str_replace("?", "", $json_utf8));