【php】送信したリクエストの内容を見る方法(2)
問題
APIを利用したプログラムを書いているとき、
APIに対してphpが送っているリクエスト内容を確認したいことがあります。
どうやるとよいでしょうか。
答え
プログラムが動いているサーバーにログイン可能であれば、tcpdumpで観察することが可能。
状況に応じてオプションは調整されたし。
# tcpdump -A host 相手先APIのIPアドレス
APIにリクエストを送る側 client.php
<?php $url= 'APIのURL'; $xml='<?xml version="1.0" encoding="UTF-8" ?> <books> <book> <title>APIの本</title> <price>1111</price> </book> <book> <title>PHPの本</title> <price>2222</price> </book> </books> '; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/xml")); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); $result = curl_exec($ch); var_dump($result);
リクエストの中の Content-Type や、ファイル送信時のfilenameなど、普段見えないところまで見える。
# tcpdump -A host 160.16.121.151 (略) ).SD..I.POST / HTTP/1.1 Host: xxx.example.com Accept: */* Content-Type: text/xml Content-Length: 201 <?xml version="1.0" encoding="UTF-8" ?> <books> <book> <title>API......</title> <price>1111</price> </book> <book> <title>PHP......</title> <price>2222</price> </book> </books> (略)
特にAPIの開発となると、データが正しくても、リクエストヘッダなど細かな部分が影響して失敗していることがあり、いくら調べてもわからないときは、こうしてさらに深みに入っていって原因を探すこともあります。
例)
・Content-Type は application/x-www-form-urlencoded じゃなくて text/xml じゃないとダメ
・multipart/form-data でファイルをPOSTするけど、filename=~~の部分が影響していた。curl関数だとなぜかフルパスが入るが、ファイル名だけでないとダメ。
コメント