<?php
function getRoyalMailStatus($trackingNumber) {
// Validate tracking number format
if (!preg_match('/^[A-Z0-9]{9,13}$/i', $trackingNumber)) { return "Error: Invalid tracking number format";
}
$url = "https://w...content-available-to-author-only...l.com/track-your-item#/tracking-results/" . $trackingNumber;
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
CURLOPT_SSL_VERIFYPEER => true, // Always verify SSL
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language: en-US,en;q=0.5',
'Connection: keep-alive',
],
]);
return "cURL Error: " . $error;
}
if ($httpCode !== 200) {
return "HTTP Error: " . $httpCode;
}
// Check if we got the actual tracking data or just a loading page
if (strpos($response, 'tracking-results') === false) { return "Error: Unable to retrieve tracking data. The site may require JavaScript.";
}
return parseTrackingData($response);
}
function parseTrackingData($html) {
// This is a simplified parser - Royal Mail's actual structure is more complex
if (preg_match('/<div class="tracking-status">(.*?)<\/div>/s', $html, $matches)) { }
if (preg_match('/<title>(.*?)<\/title>/', $html, $matches)) { return "Status not found in page. Title: " . $matches[1];
}
return "Unable to parse tracking information";
}
// Usage
$trackingNumber = "MZ396583547GB";
$result = getRoyalMailStatus($trackingNumber);
echo $result;
?>
PD9waHAKZnVuY3Rpb24gZ2V0Um95YWxNYWlsU3RhdHVzKCR0cmFja2luZ051bWJlcikgewogICAgLy8gVmFsaWRhdGUgdHJhY2tpbmcgbnVtYmVyIGZvcm1hdAogICAgaWYgKCFwcmVnX21hdGNoKCcvXltBLVowLTldezksMTN9JC9pJywgJHRyYWNraW5nTnVtYmVyKSkgewogICAgICAgIHJldHVybiAiRXJyb3I6IEludmFsaWQgdHJhY2tpbmcgbnVtYmVyIGZvcm1hdCI7CiAgICB9CiAgICAKICAgICR1cmwgPSAiaHR0cHM6Ly93Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5sLmNvbS90cmFjay15b3VyLWl0ZW0jL3RyYWNraW5nLXJlc3VsdHMvIiAuICR0cmFja2luZ051bWJlcjsKICAgIAogICAgJGNoID0gY3VybF9pbml0KCk7CiAgICAKICAgIGN1cmxfc2V0b3B0X2FycmF5KCRjaCwgWwogICAgICAgIENVUkxPUFRfVVJMID0+ICR1cmwsCiAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiB0cnVlLAogICAgICAgIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gPT4gdHJ1ZSwKICAgICAgICBDVVJMT1BUX1VTRVJBR0VOVCA9PiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzkxLjAuNDQ3Mi4xMjQgU2FmYXJpLzUzNy4zNicsCiAgICAgICAgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiA9PiB0cnVlLCAvLyBBbHdheXMgdmVyaWZ5IFNTTAogICAgICAgIENVUkxPUFRfVElNRU9VVCA9PiAzMCwKICAgICAgICBDVVJMT1BUX0hUVFBIRUFERVIgPT4gWwogICAgICAgICAgICAnQWNjZXB0OiB0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS93ZWJwLCovKjtxPTAuOCcsCiAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2U6IGVuLVVTLGVuO3E9MC41JywKICAgICAgICAgICAgJ0Nvbm5lY3Rpb246IGtlZXAtYWxpdmUnLAogICAgICAgIF0sCiAgICBdKTsKICAgIAogICAgJHJlc3BvbnNlID0gY3VybF9leGVjKCRjaCk7CiAgICAkaHR0cENvZGUgPSBjdXJsX2dldGluZm8oJGNoLCBDVVJMSU5GT19IVFRQX0NPREUpOwogICAgCiAgICBpZiAoY3VybF9lcnJvcigkY2gpKSB7CiAgICAgICAgJGVycm9yID0gY3VybF9lcnJvcigkY2gpOwogICAgICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgICAgICByZXR1cm4gImNVUkwgRXJyb3I6ICIgLiAkZXJyb3I7CiAgICB9CiAgICAKICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgIAogICAgaWYgKCRodHRwQ29kZSAhPT0gMjAwKSB7CiAgICAgICAgcmV0dXJuICJIVFRQIEVycm9yOiAiIC4gJGh0dHBDb2RlOwogICAgfQogICAgCiAgICAvLyBDaGVjayBpZiB3ZSBnb3QgdGhlIGFjdHVhbCB0cmFja2luZyBkYXRhIG9yIGp1c3QgYSBsb2FkaW5nIHBhZ2UKICAgIGlmIChzdHJwb3MoJHJlc3BvbnNlLCAndHJhY2tpbmctcmVzdWx0cycpID09PSBmYWxzZSkgewogICAgICAgIHJldHVybiAiRXJyb3I6IFVuYWJsZSB0byByZXRyaWV2ZSB0cmFja2luZyBkYXRhLiBUaGUgc2l0ZSBtYXkgcmVxdWlyZSBKYXZhU2NyaXB0LiI7CiAgICB9CiAgICAKICAgIHJldHVybiBwYXJzZVRyYWNraW5nRGF0YSgkcmVzcG9uc2UpOwp9CgpmdW5jdGlvbiBwYXJzZVRyYWNraW5nRGF0YSgkaHRtbCkgewogICAgLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgcGFyc2VyIC0gUm95YWwgTWFpbCdzIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgbW9yZSBjb21wbGV4CiAgICBpZiAocHJlZ19tYXRjaCgnLzxkaXYgY2xhc3M9InRyYWNraW5nLXN0YXR1cyI+KC4qPyk8XC9kaXY+L3MnLCAkaHRtbCwgJG1hdGNoZXMpKSB7CiAgICAgICAgcmV0dXJuIHRyaW0oc3RyaXBfdGFncygkbWF0Y2hlc1sxXSkpOwogICAgfQogICAgCiAgICBpZiAocHJlZ19tYXRjaCgnLzx0aXRsZT4oLio/KTxcL3RpdGxlPi8nLCAkaHRtbCwgJG1hdGNoZXMpKSB7CiAgICAgICAgcmV0dXJuICJTdGF0dXMgbm90IGZvdW5kIGluIHBhZ2UuIFRpdGxlOiAiIC4gJG1hdGNoZXNbMV07CiAgICB9CiAgICAKICAgIHJldHVybiAiVW5hYmxlIHRvIHBhcnNlIHRyYWNraW5nIGluZm9ybWF0aW9uIjsKfQoKLy8gVXNhZ2UKJHRyYWNraW5nTnVtYmVyID0gIk1aMzk2NTgzNTQ3R0IiOwokcmVzdWx0ID0gZ2V0Um95YWxNYWlsU3RhdHVzKCR0cmFja2luZ051bWJlcik7CmVjaG8gJHJlc3VsdDsKPz4=