すべてのプロダクト
Search
ドキュメントセンター

HTTPDNS:HarmonyOS SDK の統合

最終更新日:Nov 26, 2025

このトピックでは、HarmonyOS ソフトウェア開発キット(SDK)を統合する方法について説明します。

はじめに

この SDK は HarmonyOS API 12 に基づいており、compileSdkVersion は 5.0.0(12) です。

説明

Beta5 より前の HarmonyOS バージョンでは、カスタムドメイン名前解決 (DNS) ルールを使用して特定の IP アドレスでサーバーにアクセスする場合、URL にポートを指定する必要があります。そうしないと、カスタム DNS ルールが有効にならず、システムは自動的に LocalDNS にフォールバックします。

前提条件

  1. プロダクトのワークフローを理解し、アカウント ID を取得します。

  2. HarmonyOS アプリケーション開発者環境を準備します。詳細については、「HarmonyOS Application Development Guide」をご参照ください。

ステップ 1:SDK をインストールする

HarmonyOS アプリケーションのルートディレクトリで次のコマンドを実行して、SDK をインストールできます。

ohpm install @aliyun/httpdns

ohpm ツールおよび OpenHarmony のサードパーティ SDK のインストール方法の詳細については、「OpenHarmony Third-party Library Repository Guide」をご参照ください。

ステップ 2:SDK を構成する

Ability の `onCreate` ライフサイクルコールバックで次のコードを実行して、SDK を設定できます。

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';

const ACCOUNT_ID = 'これを Alibaba Cloud HTTPDNS コンソールのアカウント ID に置き換えます'

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // ************* 初期化構成の開始 *************
    httpdns.configService(ACCOUNT_ID, {
      context: this.context,
      // 起動サービスノードを設定します。ターゲットリージョンを明示的に選択する必要があります。有効な値は Region.SG、Region.HK、Region.US、および Region.DE です。
      region: Region.SG, 
      useHttps: true,
    });
    // ************* 初期化構成の終了 *************
  }

  // 他のコードは省略されています
}

ACCOUNT_ID 変数は、プロダクトワークフローで取得したアカウント ID です。

重要
  • useHttps パラメーターを true に設定した場合、追加の課金費用が発生します。 詳細については、「課金ドキュメント」をご参照ください。

  • ドメイン名情報または SDNS パラメーターに高いレベルのセキュリティが必要な場合は、aesSecretKey パラメーターを設定して、解決リクエストのコンテンツレイヤーの暗号化を有効にできます。コンテンツの暗号化を使用すると、追加の課金コストが発生します。詳細については、課金ドキュメントをご参照ください。

ステップ 3:SDK を使用する

`addCustomDnsRule` メソッドの使用

ネットワークリクエストを送信する前に、SDK の名前解決 API を呼び出して HTTPDNS 名前解決を実行できます。次に、connection.addCustomDnsRule API を使用して HTTPDNS 名前解決の結果を設定し、現在のアプリケーションに対してホストとそれに対応する IP アドレス間のカスタムマッピングを追加します。次のコードは、HTTP リクエスト の例です。

import { http } from '@kit.NetworkKit';
import connection from '@ohos.net.connection';
import { httpdns, IpType, } from '@aliyun/httpdns';
import Url from '@ohos.url';

const ACCOUNT_ID = 'Alibaba Cloud HTTPDNS コンソールのアカウント ID に置き換えてください'

export async function requestWithHttpDns(url: string, options: http.HttpRequestOptions): Promise<http.HttpResponse> {
  let urlObject = Url.URL.parseURL(url);
  const host = urlObject.hostname;
  // ************* ドメイン名を取得するための HTTPDNS 名前解決の開始 *************
  const httpdnsService = await httpdns.getService(ACCOUNT_ID);
  const result = await httpdnsService.getHttpDnsResultAsync(host, IpType.Auto);
  // ************* ドメイン名を取得するための HTTPDNS 名前解決の終了 *************
  // ************* システム API を使用した DNS ルールの設定の開始 *************
  try {
    await connection.removeCustomDnsRule(host);
  } catch (ignored) {
  }
  
  const allIps: string[] = [];
  if (result.ipv4s && result.ipv4s.length > 0) {
    allIps.push(...result.ipv4s);
  }
  if (result.ipv6s && result.ipv6s.length > 0) {
    allIps.push(...result.ipv6s);
  }
  if (allIps.length > 0) {
    console.info(`request with ${allIps?.join(',')}`);
    await connection.addCustomDnsRule(host, allIps);
  } else {
    console.log(`HTTPDNS resolution returned no results. DNS rules are not set.`);
  }
  // ************* システム API を使用した DNS ルールの設定の終了 *************
  // ************* システム API を使用したネットワークリクエストの送信の開始 *************
  const httpRequest = http.createHttp();
  return httpRequest.request(url, options);
  // ************* システム API を使用したネットワークリクエストの送信の終了 *************
}

ACCOUNT_ID 変数は、プロダクトワークフローで取得したアカウント ID です。

重要

HarmonyOS で DNS 名前解決ルールをカスタマイズする方法

HarmonyOS は、DNS 名前解決ルールをカスタマイズするために、次の API を提供しています:addCustomDnsRuleremoveCustomDnsRule、および clearCustomDnsRules

`addCustomDnsRule` API を使用すると、アプリケーションはホストとそれに対応する IP アドレス間のカスタムマッピングを追加できます。

`removeCustomDnsRule` API を使用すると、アプリケーションは特定のホストのカスタム DNS ルールを削除できます。

`clearCustomDnsRules` API を使用すると、アプリケーションはすべてのカスタム DNS ルールを削除できます。

したがって、アプリケーションがネットワークリクエストの DNS ルールをカスタマイズする必要がある場合は、これらの API を使用して、ネットワークリクエストを送信する前にルールを設定できます。

`Remote Communication Kit` の `dnsRules` メソッドの使用

Remote Communication Kit パッケージを使用してネットワークリクエストを送信する場合、まず SDK のドメイン名前解決 API を呼び出して HTTPDNS 解決を実行できます。次に、dnsRules フィールドを設定して DNS ルールを変更できます。次のコードは、フェッチリクエストの例です。

import { httpdns, IpType } from '@aliyun/httpdns';
import { rcp } from '@kit.RemoteCommunicationKit';
import Url from '@ohos.url';

const ACCOUNT_ID = 'Alibaba Cloud HTTPDNS コンソールのアカウント ID に置き換えてください';

export async function rcpWithHttpDns(url: string): Promise<rcp.Response> {
  let urlObject = Url.URL.parseURL(url);
  const host = urlObject.hostname;

  // ************* IP 結果を取得するための HTTPDNS 名前解決の開始 *************
  const httpdnsService = await httpdns.getService(ACCOUNT_ID);
  const httpdnsResult = await httpdnsService.getHttpDnsResultAsync(host, IpType.Auto);
  let addresses: string[] = [];
  if (httpdnsResult.ipv4s) {
    addresses.push(...httpdnsResult.ipv4s)
  }
  if (httpdnsResult.ipv6s) {
    addresses.push(...httpdnsResult.ipv6s)
  }
  // ************* IP 結果を取得するための HTTPDNS 名前解決の終了 *************

  const request = new rcp.Request(url, "GET");
  request.configuration = {
    dns: {
      // ************* dnsRules を使用した IP アドレスの設定の開始 *************
      dnsRules: [{
        host,
        port: 80,
        ipAddresses: addresses
      }, {
        host,
        port: 443,
        ipAddresses: addresses
      }]
      // ************* dnsRules を使用した IP アドレスの設定の終了 *************
    }
  }

  // ************* システム API を使用したネットワークリクエストの送信の開始 *************
  const session = rcp.createSession();
  return session.fetch(request);
  // ************* システム API を使用したネットワークリクエストの送信の終了 *************
}

ACCOUNT_ID 変数は、プロダクトワークフローで取得したアカウント ID です。

次のステップ

SDK をより詳細に設定したり、認証済みリクエストなどの他の機能を使用したりするには、「HarmonyOS SDK API」をご参照ください。