Problem:
You want to run a program using the Cloudflare API, e.g. this example code:
#!/usr/bin/env python3 import CloudFlare cf = CloudFlare.CloudFlare() zones = cf.zones.get() for zone in zones: zone_id = zone['id'] zone_name = zone['name'] print(zone_id, zone_name)
But when trying to run it, you see the following error message:
Traceback (most recent call last): File "test-cloudflare-api.py", line 5, in <module> zones = cf.zones.get() File "/usr/local/lib/python3.8/dist-packages/CloudFlare/cloudflare.py", line 672, in get return self._base.call_with_auth('GET', self._parts, File "/usr/local/lib/python3.8/dist-packages/CloudFlare/cloudflare.py", line 117, in call_with_auth self._AddAuthHeaders(headers, method) File "/usr/local/lib/python3.8/dist-packages/CloudFlare/cloudflare.py", line 88, in _AddAuthHeaders raise CloudFlareAPIError(0, 'no email and no token defined') CloudFlare.exceptions.CloudFlareAPIError: no email and no token defined
Solution:
The Cloudflare API is missing the credentials you use to login. The easiest way to call the API with credentials is to initialize CloudFlare.CloudFlare()
with the email and token as arguments
cf = CloudFlare.CloudFlare( email="[email protected]", token="Oochee3_aucho0aiTahc8caVuak6Que_N_Aegi9o" )
Note that you can’t do all operations with all tokens and if you perform an operation that is not possible with your token, you’ll see an error message like CloudFlare.exceptions.CloudFlareAPIError: Invalid request headers