php curl v python запрос отправить файл - PullRequest
1 голос
/ 08 ноября 2019

Я пытаюсь отправить файл с помощью php curl, пытаясь повторить следующий запрос python:

requests.post( f'{url}/sample', data={"forced": True}, files={'sample': open(filepath, 'rb')}, verify=verify_ssl )

Ниже моя попытка сделать тот же запрос с использованием php curl, однако я всегда получаю ошибку400, «отсутствует образец»:


$post = array(
    'files'=>array(
        'sample'=> file_get_contents($_FILES['file']['tmp_name']),
    ),
    'data'=>array(
        'forced'=>TRUE,
    ),
);


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url.'/sample');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post));
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Skip SSL Verification
$result = curl_exec ($ch);
curl_close ($ch);

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 08 ноября 2019

Этот запрос Python выглядит как multipart/form-data, а не как запрос JSON, как в примере с PHP.

Чтобы загрузить файл с помощью curl, см. Класс CURLFile.

Я думаю, это должно выглядеть так:

<?php

$sample = new \CURLFile($_FILES['file']['tmp_name']);
$post = [
    'forced' => true,
    'sample' => $sample,
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url.'/sample');
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

$result = curl_exec($ch);
curl_close($ch);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...