Какой способ создания универсального метода для curl запросов, который используют разные методы с разным набором заголовков и настройками, является самым оптимальным? Кейс такой: написал чат-бот для Telegram на PHP. Есть класс-парсер, каждый метод которого парсит определенный источник информации. Потом результаты каждого метода отдаются в индексный файл, чтобы послать его ответом в телеграм.
Чтобы не перегружать методы для отдельных источников, я создал общий метод, который курлом обращается к подставляемому источнику в нужный момент и с нужными под этот источник настройками.
public function makeRequest(array $args, string $type) {
}
Например, где-то нужно добавить curl_setopt($curl, CURLOPT_PROXY, $proxyIp);, где-то нет, где-то парсится одна ссылка, где-то другая, чуть с другими аргументами после ?
Специфика для каждого запроса подставляется из $args, а по $type определяется, к какому источнику делается запрос. Это происходит например, так:
if($type === "source1") {
$proxiesArr = array('72.37.217.3:4145', '174.77.111.196:4145');
$randProx = array_rand($proxiesArr, 1);
$proxyIp = $proxiesArr[$randProx];
// $proxyIp = '174.77.111.196:4145';
$url1 = $args[0] . $args[1];
$headers = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.105 YaBrowser/21.3.3.230 Yowser/2.5 Safari/537.36'
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_PROXY, $proxyIp);
curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_POST, false);
curl_setopt($curl, CURLOPT_URL, $url1);
$result = curl_exec($curl);
if(curl_exec($curl) === false)
{
echo 'Ошибка curl: ' . curl_error($curl);
} else {
echo 'Операция завершена без каких-либо ошибок';
}
return $result;
}
Однако такая схема делает общий метод для curl очень громоздким: более 200 строк.. И это довольно трудно читать...
Подскажите, есть ли способ более красиво и четко такое написать? Не if($type === "source1") { и бесконечные If-ы, а что-то еще?
Может быть в коммерческой эффективной разработке это делается абстрактным классом или интерфейсом? Может, список заголовков для curl надо формировать в методах для отдельных источников? Подскажите, пожалуйста, как сделать профессиональнее?