使用PHP使用api创建自然语言分类器时出错,返回的数据错误太小,但在Postman中有效



cURL请求在Postman中使用以下内容:

curl -i -u "apikey:12345" 
-F training_data=@rtcu.csv 
-F training_metadata="{"language":"en","name":"RTCU"}" 
"https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers/v1/classifiers"

Postman为PHP生成的cURL代码返回{"code":400,"error":"Data too small","description":"收到的培训条目数=0,小于要求的最小值5"}

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "------WebKitFormBoundary7MA4YWxkTrZu0gWrnContent-Disposition: form-data; name="training_data"; filename="rtcu.csv"rnContent-Type: text/csvrnrnrn------WebKitFormBoundary7MA4YWxkTrZu0gWrnContent-Disposition: form-data; name="training_metadata"rnrn{"language":"en","name":"RTCU"}rn------WebKitFormBoundary7MA4YWxkTrZu0gW--",
CURLOPT_HTTPHEADER => array(
"Authorization: Basic 12345",
"cache-control: no-cache",
"content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}

我试过像其他帖子中建议的那样,在文件名前面添加"@",但没有成功。我还没有遇到过其他IBMWatson服务及其cURL调用的问题。可能是什么问题?

使用CURLFile对我的有效

$uploadFilePath = 'rtcu.csv';
$name = "RTCU";
$lang = "en";
$uploadFileMimeType = "text/csv";
$uploadFilePostKey = 'training_data';
$metaPostKey = "training_metadata";
$uploadFile = new CURLFile(
$uploadFilePath,
$uploadFileMimeType,
$uploadFilePostKey
);
$curlHandler = curl_init();
curl_setopt_array( $curlHandler, [
CURLOPT_URL => 'https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => array(
"Authorization: Basic 12345",
"cache-control: no-cache"
),
CURLOPT_POSTFIELDS => [
$uploadFilePostKey => $uploadFile,
$metaPostKey => "{"language":"{$lang}","name":"{$name}"}"
],
] );
$response = curl_exec( $curlHandler );
$err = curl_error( curlHandler );
curl_close( curlHandler );
if ( $err ) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
}

最新更新