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

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

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

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

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

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

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

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

--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
...