code: protected synchronized String upHost(ZoneInfo zoneInfo, boolean useHttps, String lastUpHost) {
          String upHost = null;
          String upDomain = null;
  
          if (lastUpHost != null) {
              URI uri = URI.create(lastUpHost);
              //frozen domain
              String frozenDomain = uri.getHost();
              zoneInfo.frozenDomain(frozenDomain);
          }
          //get backup domain
          for (int index = 0; index < zoneInfo.upDomainsList.size(); index++) {
              String domain = zoneInfo.upDomainsList.get(index);
              long frozenTill = zoneInfo.upDomainsMap.get(domain);
              if (frozenTill == 0 || frozenTill <= System.currentTimeMillis() / 1000) {
                  upDomain = domain;
                  break;
              }
          }
  
          if (upDomain != null) {
              //reset the selected domain
              zoneInfo.upDomainsMap.put(upDomain, 0L);
          } else {
              //reset the up host frozen time
              for (String domain : zoneInfo.upDomainsList) {
                  zoneInfo.upDomainsMap.put(domain, 0L);
              }
              //return the first one as default
              if (zoneInfo.upDomainsList.size() > 0) {
                  upDomain = zoneInfo.upDomainsList.get(0);
              }
          }
  
          if (upDomain != null) {
              if (useHttps) {
                  upHost = String.format("https://%s", upDomain);
              } else {
                  upHost = String.format("http://%s", upDomain);
              }
          }
  
          return upHost;
      }
docs: 获取上传域名