رفع خطای API: cURL error 28 در وردپرس وقتی هاست شما نمی تواند به API متصل شود
اگر تا به حال یک افزونه وردپرس را نصب کرده باشید که برای فعال سازی، بررسی لایسنس یا دریافت اطلاعات نیاز به ارتباط با یک سرویس خارجی داشته باشد، احتمالاً با خطایی مواجه شده اید که در نگاه اول کمی ترسناک به نظر می رسد:
API: cURL error 28: Connection timed out after 10000 milliseconds
اولین چیزی که معمولاً به ذهن می رسد این است که حتماً افزونه مشکل دارد.
شاید با خودتان بگویید افزونه درست نصب نشده، API از کار افتاده یا حتی کد افزونه با نسخه PHP هاست سازگار نیست.
اما همیشه ماجرا این طور نیست.
گاهی همه چیز در سمت افزونه کاملا درست است و سرویس API هم بدون هیچ مشکلی در حال کار است اما مشکل فقط از جایی بین این دو اتفاق می افتد.
سرور سایت شما نمی تواند در زمان مشخصی به سرور API متصل شود.
این اتفاق را در بعضی سایت هایی که روی هاست ایران قرار داشتند تجربه کردیم؛ جایی که افزونه روی بسیاری از سایت ها بدون مشکل کار می کرد، اما روی یک هاست خاص، هنگام برقراری ارتباط با API با خطای Timeout مواجه می شد.
در چنین شرایطی، تغییر افزونه یا نصب مجدد آن معمولاً چیزی را حل نمی کند و باید سراغ خود ارتباط سرور رفت.
cURL error 28 یعنی چه ؟
وقتی یک افزونه وردپرس برای دریافت اطلاعات یا ارسال درخواست با یک API خارجی ارتباط برقرار می کند، در واقع سرور سایت شما باید یک درخواست اینترنتی به سرور مقصد ارسال کند و پاسخ آن را دریافت کند.
فرآیند تقریباً به این شکل است:
سایت شما > ارسال درخواست به API > سرور سرویس > پردازش درخواست > ارسال پاسخ > سایت شما
اگر سرور سایت نتواند در مدت تعیین شده این ارتباط را برقرار کند، درخواست منتظر می ماند و در نهایت Timeout می شود.
در این حالت ممکن است خطایی مانند زیر نمایش داده شود :
cURL error 28: Connection timed out after 10000 milliseconds
عدد 10000 نیز نشان می دهد که درخواست حدود ۱۰ ثانیه منتظر مانده است.
اما نکته مهم اینجاست :
Timeout همیشه به معنی کند بودن API نیست .
گاهی API کاملا سریع و سالم است ، اما سروری که سایت روی آن قرار دارد اصلا نمی تواند به مقصد مورد نظر متصل شود.
چرا این مشکل بیشتر خودش را روی بعضی هاست های ایران نشان می دهد؟
فرض کنید API افزونه روی یک سرور خارج از ایران قرار دارد . وقتی کاربر سایت خود را از کامپیوترش باز می کند این سرور هاست کاربر است که باید درخواست را ارسال کند به همین دلیل ممکن است این اتفاق رخ دهد ما در چنین شرایطی با سایتی روبه رو می شویم که خودش کاملا باز می شود، وردپرس سالم است ، افزونه هم نصب شده ، اما در لحظه ای که باید با سرویس خارجی ارتباط برقرار کند ، همه چیز متوقف می شود.
پس مشکل از افزونه نیست ؟
در بسیاری از موارد خیر.
اگر یک افزونه روی تعداد زیادی سایت بدون مشکل کار می کند و فقط روی برخی سرورها خطای cURL error 28 می دهد، بهتر است قبل از تغییر کد افزونه، وضعیت ارتباط سرور را بررسی کنیم.
این موضوع مخصوصاً زمانی جدی تر می شود که مشخص شود سایت روی هاست ایران قرار دارد و سرویس مقصد روی سرور خارجی میزبانی می شود.
در این حالت، مواردی مانند مسیر ارتباطی، فایروال، DNS یا محدودیت های خروجی سرور می توانند روی نتیجه تأثیر بگذارند.
به زبان ساده، ممکن است:
افزونه سالم باشد، API سالم باشد، اما ارتباط بین این دو برقرار نشود.
آیا تغییر PHP مشکل را حل میکند؟
در بیشتر سناریوهایی که مشکل واقعا از عدم دسترسی سرور به API باشد، تغییر نسخه PHP راه حل اصلی نیست.
ممکن است کاربر نسخه PHP را از 7.4 به 8.1 تغییر دهد، افزونه را حذف و دوباره نصب کند یا حتی وردپرس را بهروزرسانی کند، اما اگر سرور همچنان نتواند به مقصد متصل شود، نتیجه همان خواهد بود.
به همین دلیل بهتر است ابتدا علت اصلی را پیدا کنیم و بعد سراغ تغییر تنظیمات برویم.
چه کارهایی را نباید انجام دهیم
قبل از اینکه افزونه را حذف کنید! وقتی با این خطا مواجه می شوید، معمولاً چند کار به ذهن می رسد:
حذف و نصب دوباره افزونه
تغییر نسخه PHP
پاک کردن کش
تغییر تنظیمات وردپرس
افزایش Timeout
اما اگر مشکل واقعا از ارتباط سرور با API باشد، انجام دادن این کارها لزوما کمکی نمی کند.
قبل از دستکاری افزونه، یک سؤال ساده بپرسید: آیا سرور من اصلا می تواند به API متصل شود؟
اگر جواب این سؤال مشخص شود ، ادامه مسیر عیب یابی بسیار ساده تر خواهد بود.
اگر روی هاست ایران هستید ، چه کار کنید؟
اگر سایت شما روی هاست ایران قرار دارد و هنگام استفاده از افزونه با خطای cURL error 28 مواجه می شوید قبل از اینکه افزونه را مقصر بدانید بهتر است وضعیت ارتباط سرور با API را بررسی کنید.
در این شرایط چند عامل مختلف می تواند باعث ایجاد مشکل شود. برای مثال ممکن است پورت 443 برای ارتباط HTTPS از سمت سرور محدود شده باشد، فایروال یا WAF هاستینگ اتصال به مقصد را مسدود کرده باشد یا حتی DNS سرور نتواند دامنه API را به درستی Resolve کند یا مسیر ارتباطی سرور تا IP مقصد دچار مشکل باشد.
گاهی هم هیچ کدام از این موارد به صورت مستقیم مشخص نیست و فقط IP خروجی همان سروری که سایت روی آن قرار دارد، امکان برقراری ارتباط با مقصد را ندارد.
به همین دلیل پیشنهاد می کنیم در چنین شرایطی با پشتیبانی هاستینگ تماس بگیرید و از آنها بخواهید ارتباط خروجی سرور با دامنه API را به صورت مستقیم بررسی کنند. صرفاً اینکه بگویند پورت 443 باز است کافی نیست ؛ باید مشخص شود که سرور واقعاً می تواند به مقصد مورد نظر متصل شود.
چه پیامی برای هاستینگ بفرستیم؟
می توانید پیام زیر را برای پشتیبانی هاست خود ارسال کنید:
سلام وقت بخیر
در سایت وردپرسی من هنگام اتصال به یک API خارجی با خطای زیر مواجه می شوم :
cURL error 28: Connection timed out after 10000 milliseconds
لطفا از روی همان سروری که سایت من روی آن قرار دارد، اتصال خروجی HTTPS به دامنه Rolfa.ir را بررسی کنید.
همچنین لطفا مواردی مثل پورت 443، Firewall، WAF، DNS، محدودیت درخواست های خروجی PHP/cURL و مسیر ارتباطی سرور تا IP مقصد را بررسی کنید.
در صورت امکان لطفاً یک تست cURL مستقیم از خود سرور به آدرس Rolfa.ir انجام دهید تا مشخص شود آیا سرور امکان برقراری ارتباط با مقصد را دارد یا خیر.
ممنون می شوم نتیجه بررسی را اعلام کنید.
اگر هنگام اتصال افزونه به API با خطاهای مربوط به SSL و گواهی امنیتی مواجه شده اید، این مشکل با cURL error 28 تفاوت دارد و معمولا به اعتبار یا شناسایی گواهی SSL مربوط می شود. برای آشنایی با علت این خطا و روش های برطرف کردن آن، پیشنهاد می کنیم مقاله رفع خطای cURL error 60 SSL certificate را نیز مطالعه کنید.
جمع بندی
خطای API: cURL error 28: Connection timed out after 10000 milliseconds یکی از آن خطاهایی است که نباید با دیدن آن سریع نتیجه بگیریم افزونه خراب است
گاهی مشکل دقیقاً جایی است که کمتر به آن توجه می کنیم یعنی ارتباط میان سرور سایت و سرویس API.
اگر سایت روی هاست ایران قرار داشته باشد و API روی یک سرور خارجی میزبانی شود، شرایط شبکه و دسترسی خروجی سرور می تواند باعث شود درخواست به مقصد نرسد و بعد از مدتی با خطای Timeout مواجه شود.
در چنین شرایطی، قبل از تغییر نسخه PHP، حذف افزونه یا افزایش بی دلیل Timeout، بهتر است ابتدا مسیر ارتباطی را بررسی کنیم.
چون گاهی واقعاً مشکل از افزونه نیست. افزونه فقط درخواست را ارسال کرده؛ این مسیر ارتباطی است که اجازه نداده درخواست به مقصد برسد.





