Token Itu Sah. Namun, Ejen Headless Saya Tetap Mengalami Ralat 401.
Saya membina dua alatan kecil untuk memanggil Claude melalui kod. Satu menjana mesej komit. Satu lagi mengemas kini profil.
Kod tersebut kelihatan sempurna. Ia mengambil kunci API daripada persekitaran. Ia menghantar permintaan HTTPS mentah ke Anthropic API. Ia menghuraikan respons JSON.
Ia gagal setiap kali dengan ralat 401.
Masalahnya bukan pada kod. Masalahnya adalah kaedah pengesahan.
Saya tidak menggunakan kunci API mentah. Saya menggunakan Claude Code melalui langganan. Ini menggunakan OAuth melalui Claude CLI. Ini adalah sistem yang berbeza daripada apa yang dijangkakan oleh skrip saya.
Persekitaran saya mempunyai nilai yang lapuk atau kosong di bawah pemboleh ubah kunci API. Skrip tersebut melihat adanya nilai dan menyangka ia sah. Permintaan dihantar dengan jenis kredential yang salah.
Penyelesaiannya mudah. Saya berhenti membuat panggilan API secara terus. Sebaliknya, saya mengarahkan skrip saya untuk menggunakan CLI yang sudah mempunyai sesi yang sah.
Cara lama:
Gunakan urllib untuk menghantar permintaan dengan kunci API.
Cara baharu:
Gunakan subprocess untuk menjalankan arahan "claude" secara terus.
CLI mengendalikan sesi, token, dan tamat tempoh untuk anda.
Kesilapan ini berbahaya dalam persekitaran headless. Manusia akan melihat ralat dalam terminal. Namun, tugasan cron atau saluran paip CI akan gagal secara senyap. Anda mungkin tidak menyedarinya selama berhari-hari.
Anda akan melihat corak yang sama di tempat lain:
- Satu alatan mencari token akses peribadi tetapi sistem menggunakan OIDC.
- Satu skrip membaca kunci AWS manakala sistem menggunakan peranan IAM.
Token itu ada. Token itu terbentuk dengan betul. Ia melepasi semakan asas tetapi menggunakan mekanisme yang salah.
Ikuti peraturan ini untuk mengelakkannya:
- Tanya bagaimana persekitaran anda melakukan pengesahan secara interaktif sebelum menulis kod. Jangan sekadar mengikut dokumentasi API.
- Jangan percayai
os.environ. Nilai yang ada mungkin sudah lapuk atau salah. - Jika alatan CLI mengendalikan pengesahan untuk anda, gunakannya. Jalankan arahan shell ke CLI daripada membina semula logik pengesahan anda sendiri.
- Jika anda mendapat ralat 401, semak laluan kredential anda sebelum anda mengubah kod permintaan anda.
Sumber: https://dev.to/enjoy_kumawat/the-token-was-valid-my-headless-agent-401d-anyway-3bgl
Komuniti pembelajaran pilihan: https://t.me/GyaanSetuAi
