使用curl

时间:2017-08-02 11:21:41

标签: php curl

我使用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);

我找到这个解决方案的链接: -

enter link description here

我经常搜索找到解决方案,但没有任何方法可以帮助我,所以请帮助我。 谢谢

1 个答案:

答案 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,它都会打印许多有用的调试信息