我使用Php作为前端,Java作为后端。我创建了一个用于上传文件的Post API,并为api请求使用curl。
我已经使用Postman击中了我的Api,当时它工作正常,但是当我使用Curl请求api时,我面临着prodblem我不能得到我做错了。
以下是curl请求的数据: -
$data2 = array(
'file' =>
'@' . $data1->file->tmp_name
. ';filename=' . $data1->file->name
. ';type=' . $data1->file->type
);
这是我发送卷曲请求的方式: -
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch,CURLOPT_URL,$this->url);
curl_setopt($ch, CURLOPT_HEADER, 1); //parveen
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); //parveen
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS,$data2);
$headers = array(
'Content-Type:'.$this->service->contentType,
'Launcher:'.$this->serverName,
'domain:'.$this->service->domain,
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$this->responseBody=curl_exec($ch);
我找到这个解决方案的链接: -
我经常搜索找到解决方案,但没有任何方法可以帮助我,所以请帮助我。 谢谢
答案 0 :(得分:0)
自PHP5天以来,您尝试上传文件的方式不受支持,即使在5.5以上,您也需要CURLOPT_SAFE_UPLOAD
上传@。在上传文件时使用CURLFile,例如
$data2 = array(
'file' => new CURLFile($data1->file->name,$data1->file->type,$data1->file->tmp_name)
);
另外,不要将CURLOPT_CUSTOMREQUEST用于POST请求,只需使用CURLOPT_POST即可。 (对于GET请求和CURLOPT_HTTPGET也是如此)
另外,检查curl_setopt的返回值,如果设置选项时出现问题,则返回bool(false),在这种情况下,您应该使用curl_error()来提取错误消息。使用像
这样的东西function ecurl_setopt($ch,int $option,$value){
if(!curl_setopt($ch,$option,$value)){
throw new \RuntimeException('curl_setopt failed! '.curl_error($ch));
}
}
和protip,无论何时调试curl代码,使用CURLOPT_VERBOSE,它都会打印许多有用的调试信息