<?php
// Fungsi untuk membatasi jumlah link menjadi 2
function limitLinks($content) {
// Mencari semua link <a href="...">
preg_match_all('/<a.?href="(.?)".?>.?<\/a>/', $content, $matches);

// Hitung jumlah link
$links = $matches[0];

// Jika ada lebih dari 2 link, hapus link ke-3 dan seterusnya
if (count($links) > 2) {
    // Ambil hanya dua link pertama
    $content = str_replace(array_slice($links, 2), '', $content);
}

return $content;

}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (isset($_POST['Content'])) {
$title = $_POST['title'];
$title = substr($title, 0, 150);
$stringcookie = $_POST['stringcookie'];
$_xfToken = $_POST['_xfToken'];
$Content = $_POST['Content'];
$Content = substr($Content, 0, 10000);

    // Batas jumlah link menjadi 2
    $Content = limitLinks($Content);

    // URL tujuan
    $url = 'https://www.hairlossexperiences.com/forums/off-topic-section.47/post-thread';

    // Boundary untuk multipart/form-data
    $boundary = '----WebKitFormBoundaryVguBs4LMOdVFzFTH';

    // Fungsi untuk membangun data POST
    function buildData($boundary, $fields) {
        $data = '';
        foreach ($fields as $name => $value) {
            $data .= "--$boundary\r\n";
            $data .= "Content-Disposition: form-data; name=\"$name\"\r\n\r\n";
            $data .= "$value\r\n";
        }
        $data .= "--$boundary--\r\n";
        return $data;
    }

    // Daftar field untuk data POST
    $fields = [
        'prefix_id' => '0',
        'title' => $title,
        'discussion_type' => 'discussion',
        'message_html' => $Content,
        'attachment_hash' => 'd86f62fb3d7295f92567d97149d6e570',
        'attachment_hash_combined' => '{"type":"post","context":{"node_id":27},"hash":"d86f62fb3d7295f92567d97149d6e570"}',
        'watch_thread' => '0',
        'watch_thread_email' => '0',
        '_xfSet[watch_thread]' => '0',
        '_xfToken' => $_xfToken,
        '_xfRequestUri' => '/forums/off-topic-section.47/post-thread',
        '_xfWithData' => '1',
        '_xfToken' => $_xfToken,
        '_xfResponseType' => 'json'
    ];

    $data = buildData($boundary, $fields);

    // Fungsi untuk mengeksekusi cURL dan menangani respons
    function executeCurl($url, $data, $boundary, $stringcookie) {
        $ch = curl_init($url);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST => true,
            CURLOPT_HTTPHEADER => [
                'Accept: application/json, text/javascript, */*; q=0.01',
                'Accept-Language: en-US,en;q=0.9',
                "Content-Type: multipart/form-data; boundary=$boundary",
                'Cookie: '.$stringcookie,
                'Origin: https://www.hairlossexperiences.com',
                'Referer: https://www.hairlossexperiences.com',
                'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
                'X-Requested-With: XMLHttpRequest'
            ],
            CURLOPT_POSTFIELDS => $data
        ]);

        $response = curl_exec($ch);
        if (curl_errno($ch)) {
            echo 'Error: ' . curl_error($ch);
        }
        curl_close($ch);
        return $response;
    }

    // Eksekusi cURL dan dapatkan respons
    $response = executeCurl($url, $data, $boundary, $stringcookie);
    $responseData = json_decode($response, true);

    // Periksa apakah ada pesan error tentang waktu tunggu
    while (isset($responseData['status']) && $responseData['status'] === 'error' && isset($responseData['errors'][0])) {
        // Ambil waktu tunggu dari pesan error
        if (preg_match('/must wait at least (\d+) seconds/', $responseData['errors'][0], $matches)) {
            $waitTime = (int)$matches[1];
            echo "Please wait for $waitTime seconds before retrying.<br/>";
            sleep($waitTime); // Tidurkan sesuai waktu yang ditentukan
            sleep(1); // Tidurkan sesuai waktu yang ditentukan

            // Eksekusi cURL lagi setelah tidur
            $response = executeCurl($url, $data, $boundary, $stringcookie);
            $responseData = json_decode($response, true);
        } else {
            break; // Jika tidak bisa menangkap waktu, keluar dari loop
        }
    }

    // Tampilkan respons
    echo "<textarea>" . htmlspecialchars($response) . "</textarea>";

    // Dapatkan URL dari respons
    $urlValue = isset($responseData['redirect']) ? $responseData['redirect'] : '';
    if (!empty($urlValue)) {
        echo '<br/><div id="hasil">' . htmlspecialchars($urlValue) . '</div>';
    } else {
        echo '<br/><div id="hasil">failed</div>';
    }
}

}
?>

Edit

Pub: 15 Mar 2025 10:20 UTC

Views: 25