Php 将文件发送到api

Php 将文件发送到api,php,api,php-curl,Php,Api,Php Curl,我无法通过curl将文件发送到api。 我有一个在postman中生成的代码,但不幸的是它不起作用。我从制作人那里得到了邮递员的图书馆 $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://api.accept.autenti.net/api/v0.1/documents/*********************/files", CURLOPT_RETURNT

我无法通过curl将文件发送到api。 我有一个在postman中生成的代码,但不幸的是它不起作用。我从制作人那里得到了邮递员的图书馆

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.accept.autenti.net/api/v0.1/documents/*********************/files",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => array('files'=> new CURLFILE('/path/to/file'),'files'=> new CURLFILE('/path/to/file')),
  CURLOPT_HTTPHEADER => array(
    "Authorization: *********************",
    "Content-Type: application/x-www-form-urlencoded"
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
服务器响应:

{"error":{"id":"8fca0a50-8e8f-48e7-9855-30d27fdd45fd","key":"NO_FILES_GIVEN"}}
{"error":{"id":"c7a19220-f953-4ffd-893b-18914bbb161d","key":"FILE_SIZE_LIMIT_EXCEEDED"}}
我根据文档修改了它。我已添加到CURLOPT_HTTPHEADER

"Content-Type: multipart / form-data; boundary = Content-Disposition: form-data; name = 2665; Content-Type: application / pdf",
"Content-Length: 192897"
现在看起来是这样的:

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.accept.autenti.net/api/v0.1/documents/*********************/files",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => array('files'=> new CURLFILE('2665.pdf')),
  CURLOPT_HTTPHEADER => array(
    "Authorization: *********************",
    "Content-Type: multipart/form-data; boundary=Content-Disposition: form-data; name=2665; Content-Type: application/pdf",
    "Content-Length: 192897"
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
服务器响应:

{"error":{"id":"8fca0a50-8e8f-48e7-9855-30d27fdd45fd","key":"NO_FILES_GIVEN"}}
{"error":{"id":"c7a19220-f953-4ffd-893b-18914bbb161d","key":"FILE_SIZE_LIMIT_EXCEEDED"}}

这里是文档的链接:上传。

这是postman中的一个bug,生成的代码毫无意义,如果你可能被纵火,你应该向postman发送一个bug报告

CURLOPT_POSTFIELDS=>array(
'files'=>new CURLFILE('/path/to/file'),
'files'=>新文件('/path/to/file'))
)
几乎是合法的、荒谬的php代码,也许应该是这样的

CURLOPT_POSTFIELDS=>array(
“文件”=>数组(
0=>新文件('/path/to/file'),
1=>新文件('/path/to/file')
)
)
另外,如果它确实是一个
多部分/表单数据
-post,那么这个标题就是错误的,最有可能是生成器中的错误:
“内容类型:应用程序/x-www-form-urlencoded”

不要手动设置
“内容类型:多部分/表单数据;边界”
-标题,而是让curl自动生成,也不要设置
“内容长度:192897“
header手动,很可能是不正确的,因为长度取决于文件大小和边界长度,甚至取决于正在上载的文件的文件名,如果您不这样做,curl将自动为您生成header(而且curl不会在长度头中犯任何错误,与您不同)

错误可能意味着您实际超出了限制,但更可能的是,您的硬编码
内容长度:192897
-头有一个伪造的值,而伪造的内容长度头值使服务器混淆,并生成“文件大小\u限制\u超出”错误

但在我看来,浏览文档应该是:

$ch=curl_init();
curl_setopt_数组($ch,数组(
CURLOPT_URL=>'https://api.accept.autenti.net/api/v0.1/documents/*********************/文件',
CURLOPT_HTTPAUTH=>CURLAUTH_载体,
CURLOPT_XOAUTH2_承载=>“令牌”,
CURLOPT_POST=>1,
CURLOPT_POSTFIELDS=>数组(
新文件($filename,“application/pdf”)
)
));
curl_exec($ch);
。。。他们的示例代码很糟糕。以下是由上述代码生成的请求:

POST /api/v0.1/documents/*********************/files HTTP/1.1
Host: api.accept.autenti.net
Authorization: Bearer token
Accept: */*
Content-Length: 193
Content-Type: multipart/form-data; boundary=------------------------d058e8488f15fa10

--------------------------d058e8488f15fa10
Content-Disposition: form-data; name="0"; filename="test.file"
Content-Type: application/pdf

lol

--------------------------d058e8488f15fa10--
这看起来非常接近他们在示例代码中想要的