Коллекция запросов работы с Ozon API для Postman
В принципе на основе этих запросов не сложно через Curl реализовать запросы на PHP например.
Язык C — узнаем размер массива без шуму и пыли без sizeof
Я часто думаю о жизни и пришел к такому выводу, что многое в ней лишнее. Поэтому нафига нам подключаемые библиотеки если можно все написать самому. И пусть пузатый дядька по имени бизнес вытирая потные подмышки скажет нам делай бть… не как лучше, а как быстрее. В этот раз мы засунем ему болт в задний проход и пойдем своей дорогой.
Задача: нужно узнать длину массива, но без sizeof, ибо будем считать, что мы одни на планете и на все написанные ранее библиотеки «поклали прибор».
#include <stdio.h>
int main(void) {
//наш массивчик
int left[] = {2,67,89,200,100,100};
//узнаем размер массива без функции sizeof
int size = *(&left + 1) - left;
printf("%d\n", size);
return 0;
}
Здесь следующее:
&left - указатель на массив из 6 элементов
(&left + 1) - адрес на 6 целых чисел - указатель на массив из 6 целых чисел
*(&left + 1) - тот же адрес, что и (&left + 1) , но тип указателя int *
Понятно что нифига асболютно не понятно. Что тут происходит подробно напишу позже.
Gitlab API — создание, обновление файла на PHP
Ранее я писал как можно через curl в Linux выполнить запрос в Linux на создание файла или его обновление в репозитории Gitlab через его API. Ниже показано как это сделать через Curl, но уже в PHP.
Получить информацию по репозиторию:
<?php
$headers = ['PRIVATE-TOKEN: 123ABC'];
$url = 'https://main-git.ru/api/v4/projects/Dima/%2Fdima-tools';
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_URL, $url);
$result = curl_exec($curl);
$info = curl_getinfo($curl);
curl_close($curl);
var_dump($info);
var_dump($result);
Создать файл в репозитории:
<?php
$json_array = array("branch" => "master", "author_email" => "dima@example.com", "author_name" => "Firstname Lastname", "content" => "some content", "commit_message" => "create a new file");
$JSON = json_encode($json_array);
$headers = array('PRIVATE-TOKEN: 123ABC', 'Content-Type: application/json');
$url = 'https://main-git.ru/api/v4/projects/1/repository/files/app%2Fmain';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POSTFIELDS, $JSON);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($curl);
$info = curl_getinfo($curl);
curl_close($curl);
Обновить файл в репозитории, при этом наполнить его содержимым из другого файла (create json array from file in php):
<?php
//читаем файл в строку, в файле должны быть переводы строк "\n" если хотите, чтобы в //Gitlab была не одна строка без переносов
$hosts = file_get_contents('./file/hosts.txt');
$json_array = array("branch" => "master", "author_email" => "dima@russia.ru", "author_name" => "Red Dima", "content" => $hosts, "commit_message" => "update file");
$JSON = json_encode($json_array);
$headers = array('PRIVATE-TOKEN: 123ABC', 'Content-Type: application/json');
$url = 'https://main-git.msk.ru/api/v4/projects/1/repository/files/ansible%2Fhosts';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($curl, CURLOPT_POSTFIELDS, $JSON);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($curl);
$info = curl_getinfo($curl);
curl_close($curl);
var_dump($info);
var_dump($result);
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 — найти и показать дубли в ассоциативном массиве
Есть ассоциативный массив $result_arr , нужно найти и показать дубли по имени определенного элемента ‘sku’.
//смотрим дубли
$arr_c = array_column($result_arr, 'sku');
$dupes = array_diff(array_count_values($arr_c), [1]);
var_dump($dupes);
Gitlab и fullchain сертификат для работы Runner
Если у вас Gitlab работает на субдомене, то для работы gitlab runners и вообще для работы https рекомендуется ставить сертификат, содержащий полную цепочку от вашего субдомена до корневого домена.
У нас имеется:
- .crt файл, содержащий открытую публичную часть нашего сертификата субдомена
- .key файл, содержащий приватный ключ субдомена
- .pem файл, содержащий публичную часть корневого сертификата домена
Закрытый ключь домена — your_domain_name.key
Первичный сертификат — your_domain_name.crt
Промежуточный сертификат — DigiCertCA.crt
Корневой сертификат — TrustedRoot.crt
.pem должен выглядеть примерно так:
Создание .pem файла с закрытым ключем для всей цепочки:
Make sure to include the beginning and end tags on each certificate. The result should look like this:
——BEGIN RSA PRIVATE KEY——
(your_domain_name.key)
——END RSA PRIVATE KEY——
——BEGIN CERTIFICATE——
(your_domain_name.crt)
——END CERTIFICATE——
——BEGIN CERTIFICATE——
(DigiCertCA.crt)
——END CERTIFICATE——
——BEGIN CERTIFICATE——
(TrustedRoot.crt)
——END CERTIFICATE——
Получается что наш .pem будет состоять из нескольких частей.
Дальше нам нужно из .pem сгенерировать приватный ключ:
openssl rsa -in fullchain.pem -out fullchain_private.key
Далее копируем наш получившийся fullchain_private.key в директорию /etc/gitlab/ssl/ и переименовываем его чтобы не запутаться в your_domain_name.key
Из файла .pem убираем приватный ключь и копируем его в директорию /etc/gitlab/ssl/ c именем your_domain_name.pem
Далее в конфиг файл добавляем строки (или меняем):
nginx[‘ssl_certificate’] = «/etc/gitlab/ssl/your_domain_name.pem»
nginx[‘ssl_certificate_key’] = «/etc/gitlab/ssl/your_domain_name.key»
Переконфигурируем Gitlab:
sudo gitlab-ctl reconfigure
Проверяем что все добавилось:
sudo openssl s_client -connect your_domain_name:443 -showcerts /dev/null
C — диапазон случайных чисел от 10 до -10
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int tmp = 10;
for (int i = 0; i < 20; i++){
printf( "Cлучайное для числа %d из диапазона -10 до 10 = %d\n", tmp--, rand() % 21 + (-10));
}
return 0;
}
Что происходит именно в
rand() % 21 + (-10)
функция rand() выдаёт значение от 0 до 2^15 - 1 (32767)
rand() % 21 вычисляет остаток от деления полученного случайного числа на 21 (т.е. от 0 до 20).
поскольку остатки цикличны таким образом реализуется генерация случайного числа от 0 до 20 включительно
+ (-10) смещает случайное число влево на 10, т.е. вместо случайного числа в диапазоне 0..20 получается случайное число в диапазоне -10..10
Кидалы в Интернет — pbdq.net
Сайт гавно, берут деньги при этом не дают гарантий и клянутся что все сделают. При этом идут на контакт и после получения денег тишина. Никаких гарантий не дают, деньги вперед требуют. Принимают на Киви-кошелек, зарегистрированный на номере +79252542934 . Автор «Крик», пример его поста https://new.pbdq.net/topic/11798-pts-osago-notarialnye-blanki-diplomy-i-drugoe/
Дает почту sologrand@safemail.xyz , но похоже тоже подставная.
Остерегайтесь этого сайта и доменов на нем — все в одной связке чтобы кинуть.
Вывести из лог-файла Apache строки, которые находятся в интервале указанного времени.
Вот такая история…
По быстрому, чтобы не парить мозга с копированием кода можно просто выполнить команду:
wget https://raw.githubusercontent.com/solaryssky/PERL/main/apache_log_parser.pl && chmod 0777 ./apache_log_parser.pl
Использовать так:
./apache_log_parser.pl -s=13:00 -e=13:59 ./access.log