I am checking a small program to update my IP in DynDns.
What I do is the following:
#!/usr/bin/python
import requests
import json
user = "email"
password = "pass"
checkip = "http://thisisnt.com/api/getRemoteIp.php"
dynupdate = "https://members.dyndns.com/nic/update"
print "starting. Get current IP..."
ipraw = requests.get(checkip)
if ipraw.status_code is not 200:
raise "Cannot get IP address"
exit
ip = ipraw.json()['REMOTE_ADDR']
print "Remote IP: " + ip
print "updating..."
# update dyndns
headers = {'user-agent': 'mPythonClient/0.0.3'}
dyn = requests.get(dynupdate, \
headers=headers, \
auth=(user, password), \
params={'hostname': 'xjhdshsdhagsafhg.ddns.net', \
'myip': ip, \
'wildcard': 'NOCHG', \
'mx': 'MX', \
})
if dyn.status_code is not 200:
print "Update failed. HTTP Code: " + str(dyn.status_code)
if "good" in dyn.text:
print "update successful.."
else:
print "Update unsuccessful: " + dyn.text.strip()
I think I have put the data and parameters correctly, but the problem is that when I run it the update is not successful:
My question is: how could I get it to return my correctly updated IP? It always stays at:
print "Update unsuccessful: " + dyn.text.strip()
And what I would like to do is update it with the new IP and print it:
print "update successful.." + ip
As can be deduced from the error returned by the server when making the request (
badauth
), the problem is with the authentication method you are using.If you take a look at the Dyn documentation , you will see that the use of username and password to authorize requests has been deprecated , and therefore you have to use a
updater client key
(key for the updater client).You can generate one of those keys from your account .
Once you have it, put that new key instead of
pass
:And change the API endpoint to the new one:
wildcard
You can also remove the and keysmx
from the dictionaryparams
, as they are unnecessary.Clever! Running your script should work fine. Remember to add the line you mention in your question, so that it shows the new IP as you want: