Бинарный файл POST с использованием curl - PullRequest
2 голосов
/ 06 августа 2011

У меня есть базовая форма загрузки, которую я хотел бы эмулировать, используя cURL.

<?php
$params = array(
    'api_key' => $api_key,
    'api_secret' => $api_secret,
    'urls' => null,
    'uids' => 'all',
    'detector' => 'Aggressive',
    'namespace' => 'face.auth');

$action = $url . '?' . http_build_query($params);
?>

<form enctype="multipart/form-data" method="post" action="<?php echo $action; ?>">  
    <input type="file" name="upload" id="upload">
    <input type="submit" />
</form>

Я знаю, как публиковать сообщения, используя cURL, но я не уверен, как публиковать данные изображения (эти данныехранится в виде двоичных данных в базе данных, назовем это $binary).Передача $binary, как показано ниже в качестве постполя, не работает.Я видел несколько примеров, которые помещают @ перед именем файла / путем к файлу и отправляют это как пост-поле.Тем не менее, это не работает для меня (так как я имею дело с двоичными данными, а не имя файла / путь).

$params = array(
    'api_key' => $api_key,
    'api_secret' => $api_secret,
    'urls' => null,
    'uids' => 'all',
    'detector' => 'Aggressive',
    'namespace' => 'face.auth',
    $binary);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);      
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);

var_dump($data);

?>

Я также пытался:

    $params = array(
            'api_key' => $api_key,
            'api_secret' => $api_secret,
            'urls' => null,
            'uids' => 'all',
            'detector' => 'Aggressive',
            'namespace' => 'face.auth');


$action = $url . '?' . http_build_query($params);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $action);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $binary);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 17 мая 2013

Нет необходимости создавать полную строку данных, например, как @Piskvor встроил POST строку файла с использованием cURL в PHP? , чтобы достичь этого ... мы могли бы сделать это, просто передав двоичные данные в Массив сам ...

Поскольку внутри curl создается та же строка, что и "Piskvor" в вышеуказанной задаче ...

Как и когда curl получает массив в postfield, curl обрабатывает эти данные как «multipart / form-data»

но для достижения этого нам просто нужно сделать небольшое исправление в ключе массива, в котором мы передаем двоичные данные ... пожалуйста, проверьте ниже, вам нужно передать двоичные данные, как показано ниже .... и вуаля, вы получите это в $ _files массив на удаленном URL

<code><code>$params['image";filename="image'] = $binaryData</code><br>

Теперь, как это было достигнуто:

Удаленный сервер распознает ваши данные поста для файла, только если он получает атрибут filename = "some_name" в строке поста, созданной curl .... curl автоматически добавляет это в случае @filepath, но когда вы передаете его как двоичные данные, он не не понимает, что это файл ... поэтому мы получаем выше двоичного содержимого в массиве post вместо массива file ....

пожалуйста, дайте мне знать, если вышеперечисленные небольшие изменения в вашем коде не работают .... как это работает для меня ... Мне нравится делиться этим ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...