cURL Ошибка 405 Not Allow

Есть некий массив артикулов, например: 103046970, 104724354, 101833431, 100205859, 102144885.

Пытаюсь получить данные с помощью multi cURL

$urls = [];
$posts = [];
$codes = [103046970, 104724354, 101833431, 100205859, 102144885];

foreach ($codes as $code) {

    $post = [
        'id' => $code,
        'cityId' => 750000000,
        'limit' => 5
    ];

    array_push($urls, 'https://kaspi.kz/yml/offer-view/offers/' . $code);
    array_push($posts, json_encode($post));

}

$multi = curl_multi_init();
$channels = [];
$header = [
    "accept: application/json",
    "content-type: application/json; charset=UTF-8",
    "referer: https://kaspi.kz/merchantcabinet/",
];

foreach($urls as $key => $url) {

    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $posts[$key],
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HEADER => false,
        CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
    ]);

    curl_multi_add_handle($multi, $ch);

    $channels[$key] = [
        'url' => $url,
        'post' => $posts[$key],
        'channel' => $ch
    ];

}

$active = null;
do {
    $mrc = curl_multi_exec($multi, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($multi) == -1) {
        continue;
    }
    do {
        $mrc = curl_multi_exec($multi, $active);
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);
}

foreach($channels as $key => $channel) {

    $sku = json_decode($channel['post'], true);
    $content = json_decode(curl_multi_getcontent($channel['channel']), true);

    if(is_array($content) && count($content['offers']) > 0) {
        // code if success
    }

    curl_multi_remove_handle($multi, $channel['channel']);
}

curl_multi_close($multi);

Но иногда получаю ошибку 405 Not Allowed. Из 5 артикулов 2-3 возвращает 405 ошибку, а остальные 200. Не могу понять, как это исправить. Бьюсь уже неделю. Если бы мой IP был бы забанен, то я бы не мог получить иногда 200 код. С методом запроса тоже все нормально, передается POST. Или можете предложить другие варианты?


Ответы (0 шт):