在使用cURL通过HTTP POST

时间:2018-09-24 13:09:05

标签: php rest curl post

我正在尝试使用HTTP POST和cURL将文件上传到RESTful WEB API。以下是我目前正在尝试的代码块。这样,除了一个问题以外,其他所有功能都可以正常工作,它将数据存储在默认的数据库主体中。我想要的是将文件上传到用户当前正在使用的数据库主体。我需要知道两件事-

  • 是否可以通过cURL标头指定在Web服务器中使用的数据库主体,还是可以使用任何cURL选项? 进行指定,以便cURL POST上传提到的数据 数据库主体?

  • 我以前从未使用过cURL,这是通过HTTP POST将使用multipart / form-data的文件上传到RESTful WEB API的最佳选择吗?

    for($i=0; $i<count($_FILES['files_to_upload']['name']); $i++) {
            if(!empty($_FILES['files_to_upload']['tmp_name'][$i])) {
                $ext = pathinfo($_FILES['files_to_upload']['name'][$i], PATHINFO_EXTENSION);
                $finfo = finfo_open(FILEINFO_MIME_TYPE);
                $mime = finfo_file($finfo, $_FILES['files_to_upload']['tmp_name'][$i]);
                $data_for_api = [
                    'rel_type'  => PROJECTS_REL_TYPE,
                    'rel_key'   => $ktr,
                    'category'  => $_POST['file_category'][$i],
                    'filename'  => $_POST['file_name'][$i].".".$ext,
                    'file-form-data'    => new CURLFile($_FILES['files_to_upload']['tmp_name'][$i],$mime,$_FILES['files_to_upload']['tmp_name'][$i]),
                    'description'   => $_POST['file_name'][$i],
                    'uploader'  => $this->session->userdata(RESNR)
                ];
    
                $ch = curl_init(INTERNAL_API_URL.POST_A_FILE);
                curl_setopt($ch, CURLOPT_POST, 1);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data_for_api);
                if(!curl_exec($ch)) {
                    echo curl_error($ch);
                } 
                curl_close($ch);
            }
    }
    

1 个答案:

答案 0 :(得分:1)

这里确实有两个问题,这不是堆栈溢出的好格式,但是由于您的经历到目前为止非常痛苦,我将回答两个问题:

  

有没有一种方法可以在cURL标头中指定要在Web服务器中使用的数据库主体,还是可以使用任何cURL选项进行指定,以便cURL POST可以在上述数据库主体中上载数据?

对此的一般回答是“否”。 CURL对您的数据库一无所知,只说HTTP。 HTTP协议与数据库及其用户没有直接关系。这并不意味着不可能,但这是在“每个应用程序”和服务器端定义的。

您的服务器端API需要提供一种方法来执行此操作。只有该API执行此操作,CURL才能用于利用该功能。但这没有“一般性答案”。

  

我以前从未使用过cURL,这是通过HTTP POST使用multipart / form-data将文件上传到RESTful WEB API的最佳选择吗?

通常,RESTful api具有几种实现文件上传的方式。如果仅控制客户端而不控制服务器,那么这是否是最佳选择并不重要。 REST API将定义上传的工作方式,您需要使用该方法。

如果您同时控制服务器和客户端,则可能最好不要使用multipart/form-data,而应使用PUT请求并直接创建新资源,而不是将它们包装在其中表单/发布请求。

无论如何,如果您同时编写服务器和客户端,并且想了解更多有关这些答案的信息,请关闭此问题并打开2个新问题。