From 727f6f86d68de567683509d8331b76265c6341aa Mon Sep 17 00:00:00 2001 From: Brennan Kastner Date: Wed, 7 Jul 2021 14:19:08 -0500 Subject: [PATCH 1/2] feat: support sending api requests through proxy --- namecheap.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/namecheap.py b/namecheap.py index 05911ca..ca4fdac 100644 --- a/namecheap.py +++ b/namecheap.py @@ -34,7 +34,8 @@ class Api(object): def __init__(self, ApiUser, ApiKey, UserName, ClientIP, sandbox=True, debug=True, attempts_count=DEFAULT_ATTEMPTS_COUNT, - attempts_delay=DEFAULT_ATTEMPTS_DELAY): + attempts_delay=DEFAULT_ATTEMPTS_DELAY, + proxies=None): self.ApiUser = ApiUser self.ApiKey = ApiKey self.UserName = UserName @@ -44,6 +45,7 @@ def __init__(self, ApiUser, ApiKey, UserName, ClientIP, self.payload_limit = 10 # After hitting this lenght limit script will move payload from POST params to POST data self.attempts_count = attempts_count self.attempts_delay = attempts_delay + self.proxies = proxies # https://www.namecheap.com/support/api/methods/domains/create.aspx def domains_create( @@ -108,10 +110,12 @@ def _fetch_xml(self, payload, extra_payload = None): """Make network call and return parsed XML element""" attempts_left = self.attempts_count while attempts_left > 0: + kwargs = {'params': payload} if extra_payload: - r = requests.post(self.endpoint, params=payload, data=extra_payload) - else: - r = requests.post(self.endpoint, params=payload) + kwargs['data'] = extra_payload + if self.proxies: + kwargs['proxies'] = self.proxies + r = requests.post(self.endpoint, **kwargs) if 200 <= r.status_code <= 299: break if attempts_left <= 1: From e1ae23c19a0a10988ee77abb35a69ee0b226f34f Mon Sep 17 00:00:00 2001 From: Brennan Kastner Date: Wed, 7 Jul 2021 14:50:26 -0500 Subject: [PATCH 2/2] feat: add domains.getInfo endpoint --- namecheap.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/namecheap.py b/namecheap.py index ca4fdac..0366d5f 100644 --- a/namecheap.py +++ b/namecheap.py @@ -473,3 +473,21 @@ def domains_getList(self, ListType=None, SearchTerm=None, PageSize=None, SortBy= extra_payload['SortBy'] = SortBy payload, extra_payload = self._payload('namecheap.domains.getList', extra_payload) return self.LazyGetListIterator(self, payload) + + def domains_getInfo(self, DomainName, HostName=None): + """Returns information about the requested domain, for example + { + 'Status': 'Ok', + 'Id': '736542', + 'DomainName': 'domain1.com', + 'OwnerName': 'apiuser', + 'IsOwner': 'true', + 'IsPremium': 'true' + }""" + extra_payload = {'DomainName': DomainName} + if HostName: + extra_payload['HostName'] = HostName + + xml = self._call('namecheap.domains.getInfo', extra_payload) + xpath = './/{%(ns)s}CommandResponse/{%(ns)s}DomainGetInfoResult' % {'ns': NAMESPACE} + return xml.find(xpath).attrib