PHP cURL POST:415不支持的媒体j,400错误请求没有

时间:2018-01-09 21:59:55

标签: php curl

我在尝试通过PHP中的cURL使用POST方法传递信息时遇到问题。

我的“train.php”文件包含以下内容:

<?php

$tfile = $_FILES["newtrain"];
$filepath = $tfile['tmp_name'];

$fields = array(
  "training_metadata" => '{\\"language\\":\\"pt\\",\\"name\\":\\"TestClassifier\\"}',
  "training_data" => '@'.$filepath
);

$params = http_build_query($fields);

$tSession = curl_init();

curl_setopt($tSession, CURLOPT_URL,"myURL.com");
curl_setopt($tSession, CURLOPT_USERPWD, "user:password");
curl_setopt($tSession, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($tSession, CURLOPT_RETURNTRANSFER,true);
curl_setopt($tSession, CURLOPT_HEADER, true);
curl_setopt($tSession, CURLOPT_POST, true);
curl_setopt($tSession, CURLOPT_POSTFIELDS, $params);

$train=curl_exec($tSession);

if($errno = curl_errno($tSession)) {
    $error_message = curl_strerror($errno);
    echo "cURL error ({$errno}):\n {$error_message}";
}

print_r($train);

curl_close($tSession);
?>

当我从终端发送cURL命令时的等价物如下(或者更确切地说,我的PHP应该模仿这个):

curl -i --user "user":"password" -F training_data=@/Users/PT020555/file.csv -F training_metadata="{\"language\":\"pt\",\"name\":\"TestClassifier\"}" "myURL.com"

我搜索过,我不应该使用http_build_query()得到415(显然实际上已经解决了?),所以我不确定问题出在哪里。

我还尝试将$fields数组直接传递给curl_setopt($tSession, CURLOPT_POSTFIELDS, $fields);,在这种情况下,我收到400错误请求:

{“code”:400,“error”:“缺少元数据”,“说明”:“缺少所需的培训元数据。除了培训数据,请求应包含'语言'和'名称'。” }

我也尝试根据this question以下列格式编写$fields数组,但我不确定是否应该urlencode(),在哪里,以及我是否必须尝试逃避字符:

$fields = array(
  "training_metadata: '{\\\"language\\\":\\\"pt\\\",\\\"name\\\":\\\"TestClassifier\\\"}'",
  "training_data: @$filepath"
);

在之前的案例中,我还收到400 Bad Request,如果我申请http_build_query(),我会再次获得415。

该文件来自此HTML - 我从这里获取file.csv:

<FORM id = "formtr" NAME = "formtr" METHOD = "POST" action = "curl_train.php" enctype ="multipart/form-data">
 <label for="newtrain">Data for training</label>
 <input id="newtrain" name="newtrain" type="file" required>
 <input type="submit" class="submit" id='train' name = 'train' VALUE = "Train new"> </form>

我在Mac上,如果相关的话。

有人可以告诉我我做错了什么吗?谢谢!

0 个答案:

没有答案