teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

回答を追記

2017/01/12 03:29

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

answer CHANGED
@@ -19,4 +19,30 @@
19
19
  「何が取得されるのか」
20
20
  あるいは
21
21
  「どのような現象が発生するのか」
22
- を具体的に記載すると、回答が付きやすくなると思います。
22
+ を具体的に記載すると、回答が付きやすくなると思います。
23
+
24
+ # 追記
25
+
26
+ 完全に当てずっぽうの回答となりますが、
27
+ レスポンスヘッダーに`Connection: close`とあり、サーバ側からTCP接続の切断を通知されていることから、
28
+ icchii様のコメントのように timeout が発生しているか、サーバ側に"不正アクセス"と見なされているのではないかと推測します。
29
+
30
+ "timeout"については、アクセスに成功する場合と失敗する場合それぞれでレスポンスが返って来るまでの時間を計測してみてください。
31
+ また、アクセスの頻度を落としたり、しばらく時間をあけてから再度、試してみたりすると、状況が変わるかも知れません。
32
+
33
+ "不正アクセス"については、リクエストヘッダーに"Content-Length"フィールドと"User-Agent"フィールドを追加してみてください。
34
+
35
+ HTTPの仕様によると、メッセージボディを含むリクエストには"Content-Length"ヘッダーフィールドが必須のようです。
36
+ [https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.4](https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.4)
37
+ > For compatibility with HTTP/1.0 applications, HTTP/1.1 requests containing a message-body MUST include a valid Content-Length header field unless the server is known to be HTTP/1.1 compliant.
38
+
39
+ リクエストヘッダーに"Content-Length"フィールドを追加する方法は、以下などが参考になるかと思います。
40
+ [http://php.net/manual/ja/function.file-get-contents.php#102575](http://php.net/manual/ja/function.file-get-contents.php#102575)
41
+
42
+ また、"User-Agent"フィールドが設定されていない場合、何らかのセキュリティ機構によって"不正アクセス"とみなされる可能性は高くなると思います。
43
+ PHP は、デフォルトの設定では"User-Agent"フィールドを設定しません。
44
+ [http://php.net/manual/ja/filesystem.configuration.php](http://php.net/manual/ja/filesystem.configuration.php)
45
+ > 名前 デフォルト 変更可能 変更履歴
46
+ user_agent NULL PHP_INI_ALL PHP 4.3.0 から利用可能です。
47
+
48
+ 他にも必要なリクエストヘッダーがあるかも知れませんので、HTTPや"とあるサイト"の仕様などを調べてみてください。