Как использовать этот API, если код base64 слишком длинный для REST, он возвращает 414

Я пытаюсь использовать этот [API][1]:

Я использовал Postman для тестирования API, и он отлично работает, я могу получить нужный мне результат.

Но когда я пытаюсь использовать API через свой сервер, я получаю ответ HTTP_CODE: 414 от CURL. На самом деле я не могу заставить его работать через сервер.

Я кодирую файл с помощью base64 и отправляю запрос CURL, но он его не принимает: слишком длинный URL.

Как я могу использовать этот API, чтобы заставить его работать?

Другое предложение API с прямой загрузкой файла просто не могу понять, как отправить файл параметров из $_FILES.

Я попробовал второе предложение, чтобы сначала получить URL-адрес загрузки, затем сделать новый запрос CURL и добавить CURL_OPT_POSTFIELDS с параметром файла из $_FILES, но ответы API просто «false». Однако я не могу заставить его работать, когда использую POSTMAN и выбираю локальный файл на своем ПК. Он создает запрос CURL с границей и параметром файла с путем к файлу, но я не могу это воспроизвести.

--Curl Info Result:
{
   "url":"https://application.bitrix24.de/rest/disk.folder.uploadfile?auth=AUTHKEY70&id=87&data[NAME]=FILENAME.PNG&fileContent=<!--HERE IS THE BASE64 ENCODED STRING WITH OVER 760000 CHARS--!>",
   "content_type":"text/html",
   "http_code":414,
   "header_size":162,
   "request_size":16384,
   "filetime":-1,
   "ssl_verify_result":0,
   "redirect_count":0,
   "total_time":0.043392,
   "namelookup_time":0.007397,
   "connect_time":0.01181,
   "pretransfer_time":0.034394,
   "size_upload":81920,
   "size_download":193,
   "speed_download":4488,
   "speed_upload":1905116,
   "download_content_length":193,
   "upload_content_length":-1,
   "starttransfer_time":0.034398,
   "redirect_time":0,
   "redirect_url":"",
   "primary_ip":"-----",
   "certinfo":[

   ],
   "primary_port":443,
   "local_ip":"-----",
   "local_port":39962
}

--This is the POSTMAN Code which worked and uploaded the file I cut out the 
--full base64 code as it is over 760.000 Chars, I have the exact same Code on --my Serverside but if it is loaded from my Server it says 414 URI too long.

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https:/application.bitrix24.de/rest/disk.folder.uploadfile?auth=AUTHKEY",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"id\"\r\n\r\n87\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"data[NAME]\"\r\n\r\nFILENAME.png\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"fileContent\"\r\n\r\n<!-HERE IS THE BASE64 CODE WITH OVER 760000 CHARS--!>\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--",
  CURLOPT_HTTPHEADER => array(
    "Content-Type: application/x-www-form-urlencoded",
    "Postman-Token: 42f691e9-6bb3-4328-9885-c110bc625eb6",
    "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;
}

--Postman Result:

{
    "result": {
        "ID": 109,
        "NAME": "FILENAME.png",
        "CODE": null,
        "STORAGE_ID": "11",
        "TYPE": "file",
        "PARENT_ID": "87",
        "DELETED_TYPE": 0,
        "GLOBAL_CONTENT_VERSION": 1,
        "FILE_ID": 109,
        "SIZE": "130880",
        "CREATE_TIME": "2019-03-27T18:19:34+03:00",
        "UPDATE_TIME": "2019-03-27T18:19:34+03:00",
        "DELETE_TIME": null,
        "CREATED_BY": "1",
        "UPDATED_BY": "1",
        "DELETED_BY": null,
        "DOWNLOAD_URL": "https://application.bitrix24.de/rest/download.json?auth=11a19b5c002e73c2002e73c000000001e0e3033f51053b7b06eed324ebf459c859f57a&token=disk%7CaWQ9MTA5Jl89RXI3UUpRWkJhdVpUa1ZGczc2MWdXUzBUMVIybU5ZM00%3D%7CImRvd25sb2FkfGRpc2t8YVdROU1UQTVKbDg5UlhJM1VVcFJXa0poZFZwVWExWkdjemMyTVdkWFV6QlVNVkl5YlU1Wk0wMD18MTFhMTliNWMwMDJlNzNjMjAwMmU3M2MwMDAwMDAwMDFlMGUzMDMzZjUxMDUzYjdiMDZlZWQzMjRlYmY0NTljODU5ZjU3YSI%3D.txfoa2cB%2BHZPdP%2BdDIX%2F6p8%2BYvJV4XHQ9%2FNUtj4UWzU%3D",
        "DETAIL_URL": "https://application.bitrix24.de/docs/file/FOLDER/FILENAME.PNG"
    },
    "time": {
        "start": 1553699972.8649,
        "finish": 1553699974.3043,
        "duration": 1.4394969940186,
        "processing": 1.0332419872284,
        "date_start": "2019-03-27T18:19:32+03:00",
        "date_finish": "2019-03-27T18:19:34+03:00"
    }
}

Expected result is that the file is being uploaded like it is possible with postman.


  [1]: https://training.bitrix24.com/rest_help/disk/folder/disk_folder_uploadfile.php

Вы упомянули, что с Postman это работает. Но в результате Почтальона при условии, что есть "http_code":414,, это означает, что Почтальон вернул тот же статус 414.

Alex 27.03.2019 17:27

@ Алекс, спасибо, я отредактировал свой Вопрос с результатом Почтальона, кода 414 нет.

Kenan Trgic 27.03.2019 17:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
1 267
0

Другие вопросы по теме