Архив метки: curl

Gitlab — создать файл и обновить через API

Логика работы такая:

  • создаем файл в репозитории с нужным описанием
  • обновляем этот файл

Нужно создать создать ключ, заходим в пользовательские настройки, Access Tokens — пишем название, ставим нужны права и сохраняем, запомнив ключ.

Для начала нужно знать id проекта, его можно увидеть или в web-версии или выполнить запрос:

curl -GET -H 'Content-Type: application/json' --insecure --header 'PRIVATE-TOKEN: 123ABC' 'https://main-git.ru/api/v4/projects/Dima%2Fdima-tools'

В ответ придет Json, который будет будет содержать первый атрибут с именем id и номеров вашего проекта.

В Gitlab файл можно закачать как для использования в issue или merge request(в ответ придет markdown с ссылкой на файл для вставки). Запрос должен должен быть вот такой:

curl -i -k -H "PRIVATE-TOKEN: 123ABC" "https://main-git.ru/api/v4/projects/1/uploads" -X POST -F 'file=@testapi.txt'

В ответ придет вот такой ответ:
{"alt":"testapi.txt","url":"/uploads/1937f448b5468d4a76a50fdb40029829/testapi.txt","full_path":"/Dima/dima-tools/uploads/1937f448b5468d4a76a50fdb40029829/testapi.txt","markdown":"[testapi.txt](/uploads/1937f448b5468d4a76a50fdb40029829/testapi.txt)"}

Отсюда вот этот кусок :


[testapi.txt](/uploads/1937f448b5468d4a76a50fdb40029829/testapi.txt)

Его можно вставлять как markdown.

Второй вариант - это когда нам необходимо создать или обновить файл в нашем репозитории. Сначала создаем директорию app  и файл c именем main.c внутри нашего репозитория:

curl --insecure --request POST --header 'PRIVATE-TOKEN: 123ABC' --header "Content-Type: application/json" --data '{"branch": "master", "author_email": "author@example.com", "author_name": "Firstname Lastname", "content": "some content", "commit_message": "create a new file"}' "https://main-git.ru/api/v4/projects/1/repository/files/app%2Fmain%2Ec"

В ответ получаем Json:

{"file_path":"app/main.c","branch":"master"}

Далее если мы хотим обновить этот файл выполняем запрос:
curl --insecure --request PUT --header 'PRIVATE-TOKEN: 123ABC' --header "Content-Type: application/json" --data '{"branch": "master", "author_email": "author@example.com", "author_name": "Firstname Lastname","content": "some content new", "commit_message": "update file"}' "https://main-git.ru/api/v4/projects/1/repository/files/app%2Fmain%2Ec"

curl --insecure --request PUT --header 'PRIVATE-TOKEN: 123ABC' --header "Content-Type: application/json" --data '{"branch": "master", "author_email": "author@example.com", "author_name": "Firstname Lastname","content": "some content new", "commit_message": "update file"}' "https://main-git.ru/api/v4/projects/1/repository/files/app%2Fmain%2Ec"

В ответ придет Json, что обновление произведено. Если вы попытаетесь закачать уже существующий с таким именем файл - будет выдано сообщение, что такой файл уже существует и повторно не будет закачано. 

Таким образом можно использовать эту возможность даже в Bash напрямую из под Linux, не используя при этом общепринятые языки программирования. Можно переделать его, например, в PHP через Curl.
бака за компом

PHP — запрос-ответ через Curl с сервера Linux

С сервера передаем POST-запрос и получает результат- ответ через стандартную утилиту curl в Linux:

curl -so result.txt http://mainserver.ru/test.php -d"first=Dima&last=Vova"

Ключи в curl : s — тихий режим, без вывода дополнительной информации при выполнении
o — сохранить результат в файл

На стороне принимающего сервера PHP-скрипт:

<?php
$test1 = htmlspecialchars($_POST["first"]);
$test2 = htmlspecialchars($_POST["last"]);
$time = date('U');
echo "{\"time\":$time,\"first\":$test1,\"last\":$test2}\n";

В результате на сервере с которого делаем запрос, получаем файл с результатом:
{«time»:1579160382,»first»:Dima,»last»:Vova}

PHP — curl, функция для подсчета файлов на фтп

<?php
error_reporting(E_ALL | E_STRICT);

//функция подсчета количества файлов на фтп
/*
$ftp_type - протокол ftp или sftp
$ftp_host - хост фтп
$ftp_port - порт фтп
$ftp_user - пользователь фтп
$ftp_pass - пароль фтп
$ftp_dir - директория для подсчета на фтп
*/

function ftp_count($ftp_type, $ftp_host, $ftp_port, $ftp_user, $ftp_pass, $ftp_dir){
$curl = curl_init();
curl_setopt($curl,CURLOPT_HEADER,false);
curl_setopt($curl, CURLOPT_URL, "$ftp_type://$ftp_host:$ftp_port/$ftp_dir");
curl_setopt($curl, CURLOPT_USERPWD, "$ftp_user:$ftp_pass");
curl_setopt($curl, CURLOPT_FTPLISTONLY, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($curl, CURLOPT_TIMEOUT, 60);
curl_setopt($curl, CURLOPT_FAILONERROR, true);
//curl_setopt($curl, CURLOPT_VERBOSE, true);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'LIST'); // get directory list
$ftp_result = curl_exec($curl);
curl_close($curl);

$curl_array = explode(PHP_EOL, $ftp_result);

foreach($curl_array as $val){
if (!preg_match('/^d/', $val) && $val != ''){
$filesftp_array[] = $val;
}
}
$count_files = count($filesftp_array);
return $count_files;
}