Web開発やシステム連携の現場では、「XMLリクエストを送信する」「XML形式でデータをやり取りする」といった言葉をよく耳にします。でも、初めて聞く方にとっては「何それ?」って感じですよね。
XMLリクエストは、インターネット上でサーバーとデータをやり取りするための重要な技術なんです。Webアプリケーションやスマホアプリが裏側でサーバーと通信する際に、このXMLリクエストが活躍しています。
この記事では、XMLリクエストの基本概念から具体的な実装方法まで、初心者の方にもわかりやすく解説していきます。難しい専門用語も噛み砕いて説明するので、安心して読み進めてくださいね。
XMLリクエストって何?まずは基本を押さえよう

XMLリクエストの定義
XMLリクエストとは、XML形式でデータを含んだHTTPリクエストのことです。
もう少し簡単に言うと、「Webサーバーに対して、XMLという形式でデータを送る通信」ということ。メールを送るときに住所や本文を書くように、サーバーに送りたい情報をXMLという決まった形式で整理して送るイメージです。
なぜXMLでリクエストを送るの?
データをやり取りする際、ただの文字列で送るよりも、構造化されたフォーマットを使った方が便利なんです。
XMLを使うメリット:
- データの構造が明確になる
- 階層的な情報を表現しやすい
- 人間にも機械にも読みやすい
- 国際標準として広く採用されている
- 複雑なデータも正確に送れる
例えば、ユーザー登録の情報を送る場合、XMLなら以下のようにわかりやすく表現できます:
<user>
<name>山田太郎</name>
<email>yamada@example.com</email>
<age>25</age>
</user>
HTTPリクエストとの関係
XMLリクエストは、HTTPリクエストの一種です。
HTTPリクエストとは、ブラウザがWebサーバーに「このページを見せて」「このデータを保存して」などとお願いする仕組み。XMLリクエストは、その際のデータ形式としてXMLを使っているということなんです。
HTTPリクエストの基本要素:
- メソッド: GET、POST、PUT、DELETEなど(どんな操作をするか)
- URL: アクセス先のアドレス
- ヘッダー: リクエストに関する補足情報
- ボディ: 送信するデータ本体(XMLはここに入る)
XMLリクエストが使われる3つの主な場面
1. Web APIとの通信
Web API(Application Programming Interface)は、異なるシステム同士がデータをやり取りするための窓口です。
具体例:
- 天気予報サービスから気象データを取得
- 決済システムへ購入情報を送信
- 地図サービスから住所情報を検索
多くのAPIでは、リクエストやレスポンスの形式としてXMLまたはJSONを採用しています。特に企業向けのレガシーシステムでは、XMLが標準的に使われているケースが多いですね。
2. SOAP通信
SOAP(Simple Object Access Protocol)は、XML形式でメッセージをやり取りするプロトコル(通信規約)です。
SOAPの特徴:
- 厳格な仕様が定められている
- セキュリティ機能が充実
- 企業間取引などの信頼性が重要な場面で使用
- 銀行システムや在庫管理システムなどで採用
SOAPリクエストは、必ずXML形式で構成されます。
3. Ajax通信(XMLHttpRequest)
Ajaxは、Webページを再読み込みせずにサーバーと通信する技術です。
身近な使用例:
- Googleマップでマップを動かしながら新しい地図データを読み込む
- Twitterで新しいツイートを自動更新
- ECサイトで商品をカートに追加する際の在庫確認
この技術の中核にあるのが「XMLHttpRequest」というJavaScriptのオブジェクトで、名前に「XML」が入っているように、もともとXMLデータのやり取りを想定して開発されました(現在はJSON形式も広く使われています)。
XMLリクエストの基本構造を理解しよう
HTTPヘッダーの設定
XMLリクエストを送る際は、HTTPヘッダーに適切な情報を設定する必要があります。
重要なヘッダー項目:
Content-Type: application/xml
- 送信するデータがXML形式であることをサーバーに伝える
- 最も重要なヘッダー設定の一つ
Accept: application/xml
- サーバーからのレスポンスもXML形式で受け取りたいことを伝える
Content-Length: [データサイズ]
- 送信するXMLデータのバイト数
- 多くの場合、自動的に設定される
リクエストボディの構造
実際に送信するXMLデータは、リクエストのボディ部分に含めます。
基本的なXMLリクエストボディの例:
<?xml version="1.0" encoding="UTF-8"?>
<request>
<action>create</action>
<data>
<name>新商品</name>
<price>1500</price>
<category>文房具</category>
</data>
</request>
構成要素の説明:
- XML宣言: バージョンと文字コードを指定
- ルート要素: すべてのデータを包む最上位の要素
- データ要素: 実際に送りたい情報
実践!XMLリクエストを送る方法【言語別実装例】
JavaScript(XMLHttpRequest)での実装
ブラウザ上で動くJavaScriptを使った、最も基本的な方法です。
実装例:
// XMLHttpRequestオブジェクトを作成
const xhr = new XMLHttpRequest();
// リクエスト先のURLとメソッドを設定
xhr.open('POST', 'https://api.example.com/users', true);
// ヘッダーを設定
xhr.setRequestHeader('Content-Type', 'application/xml');
// レスポンス受信時の処理
xhr.onload = function() {
if (xhr.status === 200) {
console.log('成功:', xhr.responseText);
} else {
console.log('エラー:', xhr.status);
}
};
// 送信するXMLデータ
const xmlData = `<?xml version="1.0" encoding="UTF-8"?>
<user>
<name>田中花子</name>
<email>tanaka@example.com</email>
</user>`;
// リクエストを送信
xhr.send(xmlData);
ポイント:
open()でメソッド(POST/GET等)とURLを指定setRequestHeader()でContent-Typeを設定send()でXMLデータを送信
JavaScript(Fetch API)での実装
より現代的な方法として、Fetch APIを使った実装もあります。
実装例:
// 送信するXMLデータ
const xmlData = `<?xml version="1.0" encoding="UTF-8"?>
<product>
<name>ノートPC</name>
<price>120000</price>
</product>`;
// Fetch APIでリクエストを送信
fetch('https://api.example.com/products', {
method: 'POST',
headers: {
'Content-Type': 'application/xml',
'Accept': 'application/xml'
},
body: xmlData
})
.then(response => {
if (response.ok) {
return response.text();
}
throw new Error('リクエストに失敗しました');
})
.then(data => {
console.log('レスポンス:', data);
})
.catch(error => {
console.error('エラー:', error);
});
メリット:
- Promise(非同期処理)に対応しているので書きやすい
- コードがシンプルで読みやすい
- 現代のブラウザで広くサポートされている
Pythonでの実装
サーバーサイドやスクリプトでXMLリクエストを送る場合、Pythonがよく使われます。
実装例(requestsライブラリ):
import requests
# 送信するXMLデータ
xml_data = '''<?xml version="1.0" encoding="UTF-8"?>
<order>
<item>キーボード</item>
<quantity>2</quantity>
</order>'''
# ヘッダー設定
headers = {
'Content-Type': 'application/xml',
'Accept': 'application/xml'
}
# POSTリクエストを送信
response = requests.post(
'https://api.example.com/orders',
data=xml_data,
headers=headers
)
# レスポンスを確認
if response.status_code == 200:
print('成功:', response.text)
else:
print('エラー:', response.status_code)
特徴:
- シンプルで直感的なコード
- エラーハンドリングが簡単
- データ処理ライブラリと組み合わせやすい
PHPでの実装
Webサーバー側でXMLリクエストを送る際、PHPもよく使われます。
実装例(cURLを使用):
<?php
// 送信するXMLデータ
$xmlData = '<?xml version="1.0" encoding="UTF-8"?>
<customer>
<name>佐藤一郎</name>
<phone>090-1234-5678</phone>
</customer>';
// cURLセッションを初期化
$ch = curl_init('https://api.example.com/customers');
// オプションを設定
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/xml',
'Accept: application/xml'
));
// リクエストを実行
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// セッションを閉じる
curl_close($ch);
// 結果を表示
if ($httpCode == 200) {
echo '成功: ' . $response;
} else {
echo 'エラー: ' . $httpCode;
}
?>
XMLリクエスト送信時の注意点とトラブルシューティング

1. Content-Typeの設定ミス
問題: サーバーがリクエストを正しく解釈できない
XMLリクエストを送る際、Content-Typeヘッダーを必ず application/xml に設定してください。これを忘れると、サーバー側でXMLとして認識されず、エラーになります。
他の設定値との違い:
application/json→ JSON形式application/x-www-form-urlencoded→ フォームデータtext/plain→ プレーンテキスト
2. XMLの構造エラー
問題: 不正なXMLでリクエストが失敗する
送信するXMLが正しい構造でないと、サーバー側でパースエラーが発生します。
よくあるミス:
- 閉じタグの記述漏れ
- ルート要素が複数ある
- 特殊文字のエスケープ忘れ
特殊文字のエスケープ例:
<→<>→>&→&"→"'→'
3. 文字エンコーディングの問題
問題: 日本語が文字化けする
XMLの宣言とファイルの実際の文字コードが一致していることを確認しましょう。
推奨設定:
- XML宣言:
encoding="UTF-8" - ファイル保存形式: UTF-8
- HTTPヘッダー:
charset=utf-8を追加
xhr.setRequestHeader('Content-Type', 'application/xml; charset=utf-8');
4. CORS(Cross-Origin Resource Sharing)エラー
問題: ブラウザから異なるドメインのAPIにアクセスできない
セキュリティ上の理由で、ブラウザは異なるドメインへのリクエストを制限しています。
解決方法:
- サーバー側でCORSヘッダーを設定する
- プロキシサーバーを経由する
- サーバーサイドからリクエストを送る
5. タイムアウトの設定
問題: レスポンスが遅い場合に無限に待ってしまう
ネットワークが遅い場合やサーバーの処理に時間がかかる場合、タイムアウト設定をしておくと安全です。
JavaScriptでの設定例:
xhr.timeout = 5000; // 5秒でタイムアウト
xhr.ontimeout = function() {
console.log('タイムアウトしました');
};
SOAPリクエストの特殊な形式
SOAPは、XMLリクエストの中でも特に厳格な仕様を持っています。
SOAP Envelopeの構造
SOAPリクエストは、以下の構造で構成されます:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<!-- ヘッダー情報(オプション) -->
<AuthToken>abc123xyz</AuthToken>
</soap:Header>
<soap:Body>
<!-- 実際のリクエスト内容 -->
<GetUserInfo xmlns="http://example.com/api">
<userId>12345</userId>
</GetUserInfo>
</soap:Body>
</soap:Envelope>
構成要素:
- Envelope: すべてを包む最外部の要素
- Header: 認証情報などの補足データ(省略可能)
- Body: 実際の処理内容
名前空間(Namespace)の指定
SOAPでは、名前空間を正しく指定する必要があります。これは、要素名の衝突を避けるための仕組みです。
指定方法:
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap: という接頭辞を付けることで、どの規格の要素かを明確にしています。
JSONとXML、どちらを使うべき?
現代のWeb開発では、XMLとJSON(JavaScript Object Notation)の両方が使われています。
XMLが向いている場面
メリット:
- 複雑な階層構造を表現しやすい
- 属性を使った詳細な情報付加が可能
- 厳格な検証(スキーマ検証)ができる
- ドキュメント型データに適している
適した用途:
- 企業間のデータ交換
- レガシーシステムとの連携
- 法的文書や契約書のデジタル化
- 設定ファイルや構造化文書
JSONが向いている場面
メリット:
- 記述がシンプルで読みやすい
- JavaScriptとの親和性が高い
- データサイズが小さくなる傾向
- パースが高速
適した用途:
- モダンなWeb API
- モバイルアプリとの通信
- リアルタイム通信
- シンプルなデータ構造
実際の選択基準
XMLを選ぶべきケース:
- 既存システムがXMLを要求している
- 厳密なデータ検証が必要
- ドキュメント指向のデータ
JSONを選ぶべきケース:
- 新規開発のAPIを設計する場合
- パフォーマンスを重視する場合
- フロントエンドがJavaScriptメイン
よくある質問と回答
Q1: XMLリクエストとXMLHttpRequestは同じもの?
A: いいえ、異なる概念です。
- XMLリクエスト: XML形式のデータを含むHTTPリクエスト全般
- XMLHttpRequest: JavaScriptでサーバー通信を行うためのオブジェクト
XMLHttpRequestは、XML形式だけでなくJSON形式のデータもやり取りできます。名前に「XML」が付いているのは歴史的な理由によるものです。
Q2: GETメソッドでXMLリクエストを送れる?
A: GETメソッドではボディを送れないため、厳密な意味での「XMLリクエスト」は送れません。
GETメソッドは主にデータの取得に使われ、送信データはURL(クエリパラメータ)に含めます。XMLのような複雑なデータを送る場合は、POST、PUT、PATCHなどのメソッドを使いましょう。
Q3: XMLリクエストのデバッグ方法は?
A: 以下のツールや方法が効果的です:
ブラウザの開発者ツール:
- ネットワークタブでリクエスト内容を確認
- ヘッダーやボディの詳細を表示
専用ツール:
- Postman: API開発・テストツール
- cURL: コマンドラインツール
- SoapUI: SOAP専用テストツール
コンソールログ:
リクエスト送信前にXMLデータをログ出力して確認
Q4: 大きなXMLファイルを送る際の注意点は?
A: サイズが大きいXMLを送る場合、以下に注意してください:
- サーバーのサイズ制限を確認: 多くのサーバーには上限がある
- タイムアウトを長めに設定: 送信に時間がかかる
- 圧縮を検討: gzip圧縮で転送量を削減
- 分割送信: 可能であれば複数回に分けて送る
まとめ:XMLリクエストは現代でも重要な技術
XMLリクエストは、システム間でデータをやり取りする際の標準的な方法の一つです。特に企業システムやレガシーシステムとの連携では、今でも広く使われています。
この記事で学んだポイント:
- XMLリクエストの基本: XML形式でデータを含むHTTPリクエスト
- 使われる場面: Web API、SOAP通信、Ajax通信
- 実装方法: JavaScript、Python、PHPなどで送信可能
- 重要な設定: Content-Typeヘッダーを
application/xmlに設定 - 注意点: XML構造、文字エンコーディング、CORSなどに注意
実践に向けたアドバイス:
- 小さなサンプルから始めて徐々に複雑にする
- ツールを使ってリクエスト内容を確認する習慣をつける
- エラーメッセージを丁寧に読んで原因を特定する
- 必要に応じてJSONとの使い分けを検討する
XMLは一見難しそうに見えますが、基本的なルールを押さえれば、確実にデータをやり取りできる便利な技術です。この記事で紹介したコード例を参考に、ぜひ実際に試してみてください!
技術は実際に手を動かすことで身につきます。まずは簡単なXMLリクエストを送ってみることから始めましょう。


コメント