يقول، “مفتاح API ليس له قيود وجميع نقاط النهاية متاحة.”
أنا أختبر هذا عن طريق إجراء طلبات API من قشرة Python محلية، لذا فهي تأتي من نفس عنوان IP. واجهنا أيضًا حدود المعدل عند تشغيل برنامج نصي على خادمنا. في تلك الحالة، جاءت جميع الطلبات من نفس عنوان IP.
لقد أكدت أن حد المعدل يتم الوصول إليه باستخدام الكود التالي:
async def get_topic_post_stream(topic_id):
url = f"{DISCOURSE_URL}/t/{topic_id}"
async with httpx.AsyncClient(headers=HEADERS) as client:
topic = await client.get(url)
return topic.status_code
async def get_topic_post_streams(topic_ids):
tasks = [functools.partial(get_topic_post_stream, topic_id) for topic_id in topic_ids]
topics = await aiometer.run_all(
tasks,
# max_per_second=1,
)
return topics
# فقط احصل على شريحة من 15 من المواضيع في topic_ids للاختبار.
topics = asyncio.run(get_topic_post_streams(topic_ids[:15]))
لاحظ أن المعلمة max_per_second معطلة، مما يؤدي إلى عدم وجود قيود على عدد الطلبات.
يكتمل هذا في 2.05 ثانية ويُرجع 2 من أصل 15 طلبًا 429.
عندما أقوم بتشغيله مع max_per_second=1، يكتمل كل شيء بنجاح.
أخبرني إذا كان بإمكاني تقديم أي تفاصيل إضافية. شكرًا!
يبدو لي أنه لا ينبغي أن أتلقى هذه الـ 429 بغض النظر عن أي إعدادات مذكورة في هذا المنشور. في المثال الذي قدمته، أرسلت 15 طلبًا وهو أقل من جميع حدود واجهة برمجة التطبيقات الافتراضية. فعلت ذلك باستخدام مفتاح واجهة برمجة تطبيقات إداري واسم مستخدم.
المثال لا يتجاوز الحدود الافتراضية لكل عنوان IP:
حتى أنه لا يتجاوز حدود غير المسؤولين:
تغيير DISCOURSE_MAX_REQS_PER_IP_MODE إلى warn أو none لم يساعد.
هل فاتني شيء؟
بالمناسبة، قمت بتغيير الإعدادات عن طريق تحرير app.yml وتشغيل ./launcher destroy app && ./launcher start app.
تعديل: لقد تحققت للتو من محتويات الاستجابة لأحد الطلبات الفاشلة ولاحظت أنه ذكر nginx:
<html>\r\n<head><title>429 Too Many Requests</title></head>\r\n<body>\r\n<center><h1>429 Too Many Requests</h1></center>\r\n<hr>\n<center>nginx</center>\r\n</body>\r\n</html>\r\n
سأقوم بمزيد من التحقيق في المواضيع التي تذكر nginx.
هل يجب علي تعديل كلا القسمين لمطابقة إعدادات Discourse الخاصة بي؟ أم فقط القيم الخاصة بـ location @discourse؟
ما هي الطريقة الصحيحة لتعديل هذه القيم والحفاظ على التغييرات عبر عمليات إعادة البناء؟
أفترض أنه يمكنني تعديل إعدادات nginx مباشرة في الحاوية ثم إيقاف/بدء الحاوية. ولكن يبدو أن هذه القيم جاءت في الأصل من templates/web.ratelimited.template.yml وقد يتم استبدالها عند إعادة البناء؟
أوه، الآن نحن نخرج عن منطقة راحتي أخشى.\n\nإذا كنت مقيدًا بمعدل nginx، فإن العبث بهذه الإعدادات وجعلها أقل تقييدًا منطقي. لست متأكدًا مما إذا كان Nginx يمكنه وضع قائمة بيضاء لعناوين IP؟