我有一个托管在公共动态 IP 上的家用 PC 上的 Web 服务。我还有一个由 google 域托管的域名(我将在这篇文章中将其称为 www.example.com)。
通过 Google App Engine,我可以将动态 IP 存储在 memcache 上,一旦客户端指向 myhome 子域,它将被重定向到主机 ip(例如 myhome.example.com -> 111.111.1.100)。
这是我在 App Engine 上运行的 python 代码:
import json
from webapp2 import RequestHandler, WSGIApplication
from google.appengine.api import memcache
class MainPage(RequestHandler):
# Memcache keys
key_my_current_ip = "my_current_ip"
def get(self):
response_text = "example.com is online!"
# MyHome request
if (self.request.host.lower().startswith('myhome.example.com') or
self.request.host.lower().startswith('myhome-xyz.appspot.com')):
my_current_ip = memcache.get(self.key_my_current_ip)
if my_current_ip:
url = self.request.url.replace(self.request.host, my_current_ip)
# move to https
if url.startswith("http://"):
url = url.replace("http://", "https://")
return self.redirect(url, True)
response_text = "myhome is offline!"
# Default site
self.response.headers['Content-Type'] = 'text/plain'
self.response.write(response_text)
def post(self):
try:
# Store request remote ip
body = json.loads(self.request.body)
command = body['command']
if command == 'ping':
memcache.set(key=self.key_my_current_ip, value=self.request.remote_addr)
except:
raise Exception("bad request!")
app = WSGIApplication([('/.*', MainPage),], debug=True)
我发现,通过添加“A”域记录,myhome.example.com 将直接指向该 ip 而无需重定向它。
有没有办法可以使用 Google App Engine 或域 API 更新“A”域记录?
def post(self):
try:
# Store request remote ip
body = json.loads(self.request.body)
command = body['command']
if command == 'ping':
**--> UPDATE "A" Record with this IP: <self.request.remote_addr>**
except:
raise Exception("bad request!")