Fiddlerを利用してHTTPリクエストヘッダにプロキシの認証情報を追加する

# 認証プロキシ配下のPCでも外部と通信したい
認証プロキシ配下のPCでアプリケーションを利用するとき、外部との通信にはプロキシの設定が必要です。

ChromeやFirefoxのようなメジャーなアプリケーションは、プロキシを設定する項目がありますが、ツールによっては設定項目がないものがあります。
というか、ないことのほうが多いです。

そういう場合には、 Fiddler を利用してHTTPリクエストヘッダにプロキシの認証情報を追加する方法が便利です。



## Chocolatey をインストールする

Chocolateyがインストールされていない場合は、インストールしましょう。

認証プロキシは以下の場合、以下の記事がとてもわかりやすいです。
[認証プロキシ環境下でのchocolateyインストール](https://qiita.com/geotrader/items/33b5db1832bb42979ba9)



## Fiddler をインストールする

以下のコマンドでFiddlerをインストールします。

```bash
choco install -y fiddler
```

インストールできたらFiddlerを起動します。



## キャプチャ対象を `Non-Browser` に変更する

Fiddlerの左下の `Capturing` の右が `All Processes` となっていたら、 `Non-Browser` に変更しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/b044db91-83aa-8fef-af58-8798b41e944b.png)

これをやっておくと、FirefoxやChrome等のWebブラウザの通信情報が表示されなくなり、見やすくなります。



## `CustomRule.js` を編集する

`Rules > Customize Rules` をクリックし、 `CustomRule.js` を開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/359f8e67-0ffa-f528-fcb9-d961fd63c022.png)



`class Handlers` という箇所があるので、そこに以下のコードを追加します。

```javascript
class Handlers
{
    public static RulesOption("Add Proxy-Authorization")
    var m_AddProxyAuthorization: boolean = false;
```

こんな感じになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/dfad32cc-bb6f-5370-83a7-3c5378c1d778.png)

下のほうにスクロールしていくと、 `OnBeforeRequest` という関数があるので、以下のコードを追加します。

```javascript
static function OnBeforeRequest(oSession: Session) {
    if (m_AddProxyAuthorization) {
        oSession.oRequest["Proxy-Authorization"] = "Basic ＜プロキシの認証情報＞";
    }
```

`＜プロキシの認証情報＞` の部分は、 `＜ユーザー名＞:＜パスワード＞` を Base64 でエンコードした文字列になります。

例えば、

- プロキシのユーザー名： `proxyuser`
- プロキシのパスワード： `proxypass`

の場合、Base64でエンコードした文字列は `cHJveHl1c2VyOnByb3h5cGFzcw==` なので、以下のようになります。

```
oSession.oRequest["Proxy-Authorization"] = "Basic cHJveHl1c2VyOnByb3h5cGFzcw=="
```

Base64 でのエンコードの方法は以下をご覧ください。


### シェルスクリプトで Base64 エンコードする

MacやLinux等の場合、以下のコマンドでBase64のエンコードができます。

```bash
$ echo -n 'proxyuser:proxypass' | base64
cHJveHl1c2VyOnByb3h5cGFzcw==
```


### コマンドプロンプトで Base64 エンコードする

Windowsの場合、以下のコマンドでBase64のエンコードができます。
（TEMPフォルダに中間ファイルが生成されます）

```bash
> echo proxyuser:proxypass | more > %temp%\src.txt && certutil -f -encode %temp%\src.txt %temp%\dest.txt && type %temp%\dest.txt
-----BEGIN CERTIFICATE-----
cHJveHl1c2VyOnByb3h5cGFzcyANCg0K
-----END CERTIFICATE-----
```

コマンドの詳しい解説は、別に記事にまとめてありますので、ぜひご覧ください。
[コマンドプロンプトだけでBase64エンコードをする](https://qiita.com/segur/items/80a8f2e8642aedf83ae2)



最終的に `OnBeforeRequest` はこんな感じになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/00146962-1505-fec1-ce39-45fe8811a381.png)

この状態で `CustomRule.js` を保存します。




## `Add Proxy-Authorization` を有効にする



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/1b8937b0-489a-cd27-29b2-e992e94e8b7b.png)



`Rules > Add Proxy-Authorization` を有効にします。すると、HTTP通信にプロキシ認証情報が付加されるようになります！



# さいごに
以下の記事を参考にさせていただきました。ありがとうございました。

- [認証プロキシをFiddlerで超える](https://qiita.com/masai-doctor/items/1a6ab900990e73eee6e7)
- [Windows向けのパッケージ管理ソフト「chocolatey」が便利 / chocolateyのインストール](https://qiita.com/tomokin966/items/7c7f444d74a5cb7ef596#chocolateyのインストール)
- [Windows標準機能で base64のencode / decode を行う](http://tooljp.com/qa/base64-encode-decode-9E7F.html)
- [認証プロキシ環境下でのchocolateyインストール](https://qiita.com/geotrader/items/33b5db1832bb42979ba9)