HEADメソッドに対応してないところにwget --spiderを実行したときの挙動

[wgetのスパイダーモードで200 OKが返るか判定](http://qiita.com/n_slender/items/8b7b4292a11f9a1f8f88) というのをやってみたら、知り合いから、「スパイダーモードはHEADメソッドだから対応していないサーバではうまくいかないのでは」と下記の記事を教えてもらいました。

http://dminor11th.blogspot.jp/2012/05/wget-spider-head.html?m=1

気になったので、下記のようなplay javaのコードで、HEADメソッドのときに、色んなステータスコードを返させて、wget --spiderの挙動をみてみました。

```
import play.*;
import play.mvc.*;
import views.html.*;

public class Application extends Controller {

    public Result index() {
        Logger.info("http method:" + request().method());
        if (request().method().equals("HEAD")) {
            //ここで返却するステースコードを変える
            return status(Http.Status.INTERNAL_SERVER_ERROR); 
        }
        return ok(index.render("Your new application is ready."));
    }

}
```

400系は恐らく、broken link!と返される模様。

## 405 Method not allowed

```
wget --spider  http://localhost:9000
Spider mode enabled. Check if remote file exists.
--2015-10-30 23:15:26--  http://localhost:9000/
Resolving localhost... ::1, 127.0.0.1, fe80::1
Connecting to localhost|::1|:9000... connected.
HTTP request sent, awaiting response... 405 Method Not Allowed
Remote file does not exist -- broken link!!!

```

## 400 Bad request 

```
wget --spider  http://localhost:9000
Spider mode enabled. Check if remote file exists.
--2015-10-30 23:17:40--  http://localhost:9000/
Resolving localhost... ::1, 127.0.0.1, fe80::1
Connecting to localhost|::1|:9000... connected.
HTTP request sent, awaiting response... 400 Bad Request
Remote file does not exist -- broken link!!!
```

## 500 Internal Server Error 

今回のAPIの仕様のせいかもしれないが、HEADでだめだったが、残ったコネクション使って、なぜかGETでリクエストし直してるようです。

```
wget --spider  http://localhost:9000
Spider mode enabled. Check if remote file exists.
--2015-10-30 23:20:52--  http://localhost:9000/
Resolving localhost... ::1, 127.0.0.1, fe80::1
Connecting to localhost|::1|:9000... connected.
HTTP request sent, awaiting response... 500 Internal Server Error
--2015-10-30 23:20:53--  (try: 2)  http://localhost:9000/
Reusing existing connection to [localhost]:9000.
HTTP request sent, awaiting response... 200 OK
Length: 6878 (6.7K) [text/html]
Saving to: 'index.html.7'

index.html.7                     100%[=========================================================>]   6.72K  --.-KB/s   in 0s     

2015-10-30 23:20:53 (262 MB/s) - 'index.html.7' saved [6878/6878]
```

## 503 Service Unavailable

これは400系と同じ結果。

```
wget --spider  http://localhost:9000
Spider mode enabled. Check if remote file exists.
--2015-10-30 23:20:24--  http://localhost:9000/
Resolving localhost... ::1, 127.0.0.1, fe80::1
Connecting to localhost|::1|:9000... connected.
HTTP request sent, awaiting response... 503 Service Unavailable
Remote file does not exist -- broken link!!!
```

## 504 Gateway timeout

HEADメソッドでリトライし続けました。

```
wget --spider  http://localhost:9000
Spider mode enabled. Check if remote file exists.
--2015-10-30 23:19:15--  http://localhost:9000/
Resolving localhost... ::1, 127.0.0.1, fe80::1
Connecting to localhost|::1|:9000... connected.
HTTP request sent, awaiting response... 504 Gateway Timeout
Retrying.

Spider mode enabled. Check if remote file exists.
--2015-10-30 23:19:17--  (try: 2)  http://localhost:9000/
Reusing existing connection to [localhost]:9000.
HTTP request sent, awaiting response... 504 Gateway Timeout
Retrying.

Spider mode enabled. Check if remote file exists.
--2015-10-30 23:19:19--  (try: 3)  http://localhost:9000/
Reusing existing connection to [localhost]:9000.
HTTP request sent, awaiting response... 504 Gateway Timeout
Retrying.
```

## 結論 --delete-after　にしよう

GETメソッドでリクエストして、ダウンロードしたら自動で消すというオプションです。

```
wget --delete-after http://localhost:9000 2>&1 | grep '200 OK'
``` 

curl派なら、こちらを

```
curl -v  http://localhost:9000 2>&1 > /dev/null | grep '200 OK'
```

### 蛇足:「wget」のソースコードみればいいのでは？

そう思ったのですが、疲れたので断念しました...