| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- # coding=utf-8
- """
- Hurricane Electric (he.net) API
- @author: NN708, NewFuture
- """
- from ._base import SimpleProvider, TYPE_FORM
- class HeProvider(SimpleProvider):
- API = "https://dyn.dns.he.net"
- content_type = TYPE_FORM
- accept = None # he.net does not require a specific Accept header
- decode_response = False # he.net response is plain text, not JSON
- def _validate(self):
- self.logger.warning(
- "HE.net provider 缺少充分的真实环境测试,如遇问题请及时在 GitHub Issues 中反馈: %s",
- "https://github.com/NewFuture/DDNS/issues",
- )
- if self.auth_id:
- raise ValueError("Hurricane Electric (he.net) does not use `id`, use `token(password)` only.")
- if not self.auth_token:
- raise ValueError("Hurricane Electric (he.net) requires `token(password)`.")
- def set_record(self, domain, value, record_type="A", ttl=None, line=None, **extra):
- """
- 使用 POST API 更新或创建 DNS 记录。Update or create DNS record with POST API.
- https://dns.he.net/docs.html
- """
- self.logger.info("%s => %s(%s)", domain, value, record_type)
- params = {
- "hostname": domain, # he.net requires full domain name
- "myip": value, # IP address to update
- "password": self.auth_token, # Use auth_token as password
- }
- try:
- res = self._http("POST", "/nic/update", body=params)
- if res and res[:5] == "nochg" or res[:4] == "good": # No change or success
- self.logger.info("HE API response: %s", res)
- return True
- else:
- self.logger.error("HE API error: %s", res)
- except Exception as e:
- self.logger.error("Error updating record for %s: %s", domain, e)
- return False
|