CBAR.az-dan PHP ilə data çəkərkən timeout problemi və həlli

  • Mövzu müəllifi Mövzu müəllifi calal
  • Başlama tarixi Başlama tarixi

calal

Administrator
Heyət üzvü
Qeydiyyat
25 Fevral 2026
Mesajlar
2
Reaksiya balı
1
Xallar
3
1/3
Thread owner
Problem: PHP ilə curl və ya file_get_contents istifadə edərək cbar.az XML API-sindən məzənnə çəkməyə çalışarkən bəzi serverlərdə timeout xətası olur:

Kod (Code):
cURL error (28): Operation timed out after 10001 milliseconds
və ya sadəcə boş cavab gəlir.

Səbəb:CBAR saytı (94.20.63.220) bəzi xarici data-center IP-lərindən gələn HTTPS sorğularını bloklayır. TCP bağlantısı qurulur, amma SSL handshake tamamlanmır. Nəticədə sorğu donur.


Yəni problem sizin kodunuzda deyil — server tərəfli blokdur.

Həll — Cloudflare Worker (pulsuz):


workers.cloudflare.com — pulsuz hesab açın.


Yeni Worker yaradıb bu JS kodunu yapışdırın:
JavaScript:
export default {
  async fetch(request) {
    const params = new URL(request.url).searchParams;
    let date = params.get('date');

    if (!date) {
      const now = new Date(new Date().toLocaleString('en', { timeZone: 'Asia/Baku' }));
      const d = String(now.getDate()).padStart(2, '0');
      const m = String(now.getMonth() + 1).padStart(2, '0');
      const y = now.getFullYear();
      date = `${d}.${m}.${y}`;
    }

    const url = `https://www.cbar.az/currencies/${date}.xml`;

    const resp = await fetch(url, { headers: { 'User-Agent': 'Mozilla/5.0' } });
    const text = await resp.text();

    return new Response(text, {
      headers: {
        'Content-Type': 'application/xml; charset=utf-8',
        'Access-Control-Allow-Origin': '*',
        'Cache-Control': 'public, max-age=3600',
      }
    });
  }
}

Deploy etdikdən sonra sizə belə bir URL verilir:



PHP-də istifadə:


Kodunuzda yalnız URL-i dəyişin:

PHP:
// Əvvəl (işləmir):
$url = "https://www.cbar.az/currencies/" . $date . ".xml";

// Sonra (Worker vasitəsilə):
$url = "https://cbar-proxy.YOUR-NAME.workers.dev/?date=" . $date;
 
Problem: PHP ilə curl və ya file_get_contents istifadə edərək cbar.az XML API-sindən məzənnə çəkməyə çalışarkən bəzi serverlərdə timeout xətası olur:

Kod (Code):
cURL error (28): Operation timed out after 10001 milliseconds
və ya sadəcə boş cavab gəlir.

Səbəb:CBAR saytı (94.20.63.220) bəzi xarici data-center IP-lərindən gələn HTTPS sorğularını bloklayır. TCP bağlantısı qurulur, amma SSL handshake tamamlanmır. Nəticədə sorğu donur.


Yəni problem sizin kodunuzda deyil — server tərəfli blokdur.

Həll — Cloudflare Worker (pulsuz):


workers.cloudflare.com — pulsuz hesab açın.


Yeni Worker yaradıb bu JS kodunu yapışdırın:
JavaScript:
export default {
  async fetch(request) {
    const params = new URL(request.url).searchParams;
    let date = params.get('date');

    if (!date) {
      const now = new Date(new Date().toLocaleString('en', { timeZone: 'Asia/Baku' }));
      const d = String(now.getDate()).padStart(2, '0');
      const m = String(now.getMonth() + 1).padStart(2, '0');
      const y = now.getFullYear();
      date = `${d}.${m}.${y}`;
    }

    const url = `https://www.cbar.az/currencies/${date}.xml`;

    const resp = await fetch(url, { headers: { 'User-Agent': 'Mozilla/5.0' } });
    const text = await resp.text();

    return new Response(text, {
      headers: {
        'Content-Type': 'application/xml; charset=utf-8',
        'Access-Control-Allow-Origin': '*',
        'Cache-Control': 'public, max-age=3600',
      }
    });
  }
}

Deploy etdikdən sonra sizə belə bir URL verilir:



PHP-də istifadə:


Kodunuzda yalnız URL-i dəyişin:

PHP:
// Əvvəl (işləmir):
$url = "https://www.cbar.az/currencies/" . $date . ".xml";

// Sonra (Worker vasitəsilə):
$url = "https://cbar-proxy.YOUR-NAME.workers.dev/?date=" . $date;
Məlumat üçün təşəkkürlər.
 
Geri
Yuxarı