fiddlerとは
The free web debugging proxy for any browser, system or platform
( フリーのWEBデバッグプロキシで、様々なブラウザやシステム上で動作する )
https://www.telerik.com/fiddler より。
入手
https://www.telerik.com/fiddler
使い方
起動して、適当なWEBサイトにアクセスすると、リクエストと応答が覗けます。
HTTPSについて、一部後述。
応用01 localhostに対する通信のデバッグ
JavaScriptからローカル上のWEBサーバに通信する内容を覗く場合。
まずlocalhostをfiddlerのもとでは直接叩けない(下記のようなエラーになってしまう)
[Fiddler] DNS Lookup for "localhost" failed. System.Net.Sockets.SocketException そのようなホストは不明です。
これは、なぜかというと fiddler 自体が proxy で localhost を見ているため。
なので、fiddlerを経由するには ipv4.fiddler または ipv6.fiddler を叩く必要があります。
このための設定が Tools -> Host にあります。
Windowsの場合、開いたら青い文字で ImportWindowsHostsFile
とあるため、
これをクリックして読み込むと自動で追記してくれます。
(下記例)
応用02 ローカルにバーチャルホストを建てて振り分けている場合。
実は応用01のfiddlerのhostsに記載すればバーチャルホストも叩けます。
バーチャルホストの設定も「hoge.ipv4.fiddler」で記述し、(下記例)
<VirtualHost *:80>
ServerAdmin webmaster@hoge.ipv4.fiddler
DocumentRoot "C:/htdocs/hoge/"
<Directory "C:/htdocs/hoge/">
Order deny,allow
deny from all
allow from 127.0.0.1 ::1 localhost
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
ServerName hoge.ipv4.fiddler
ServerAlias www.hoge.ipv4.fiddler
ErrorLog "logs/hoge.localhost.com-error.log"
CustomLog "logs/hoge.localhost.com-access.log" common
<Files ".ht*">
Require all denied
</Files>
</VirtualHost>
先述のfiddlerのHostsにも「hoge.ipv4.fiddler」を記載するとアクセスできます。
応用03 LaravelのGuzzle Http等でローカル→外部に通信する場合
Laravel で何も proxy の設定をしていない場合、
動作中のWEBサーバから外部のサーバを叩きに行くと
localhost に立っている fiddler を経由せず、そのまま見に行きます。
なので、proxyの設定を追加してfiddlerを通るようにします。
$body = htmlspecialchars('aaaaaaaaa');
$request = (new Client())->request(
'POST', // HTTPメソッド
'hoge.example.com', // リクエスト先URL
[
'headers' => [
'Content-Type' => 'application/json; charset=UTF-8',
'Content-Length' => strlen($body),
],
'proxy' => 'localhost:8888', // プロキシ指定。これでfiddlerを通るように。
'verify' => false, // 証明書の検証をオフにする。これはテスト環境だけにすること。
'body' => $body, // 本文
//'debug' => true,
]
);
TIPS01
fiddlerでHTTPSの通信(port:443)を覗こうとすると何も表示されず、「ここで設定してね」みたいな表示が出るので、そこからfiddler のオレオレ証明書の設定をします。
ただし、そこでfiddler側の設定をしただけの場合、
fiddler を経由して guzzle 等でアクセスした際に
API Request failed.cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)
とエラーで叱られてしまいます。
このため、'verify' => false
で fiddler の証明書を検証しないようにすることが必要になります。
ただし、これを本番環境で使うとファーミング(Pharming、なりすまし)攻撃の原因になります。
TIPS02
fiddlerのportなどの設定は tools-> options 内のconnectionsタブ内に記載があります。