ブログランキング・にほんブログ村へ


iPhone/iPad用潜水艦ゲームアプリ ソナーエコー iTunesにて公開中

2013年04月22日

HttpGetとURLConnectionのリクエストヘッダの違い

AndroidのJavaでHttp GETリクエストを投げる方法には
HttpGetを使う方法とURLConnectionを使う方法の2つがある。
たいていはどっちでも同じ結果になるので、慣れてるとか好みの方法を選ぶくらいでいいんじゃないかと思うが、たまに同じ結果にならない場合がある。

それはもちろんサーバ側の応答になにか仕掛けがあるからに違いないのだけど、それが何か調べてみるため両方でhttpリクエストをしてみて、phpの$_SERVER情報を出してみた。

HTTPGetの場合----------------------------------

PHPRC: /home/XXXXXXX/www
PATH: /usr/local/bin:/usr/bin:/bin
DOCUMENT_ROOT: /home/XXXXXX/www
HTTP_CONNECTION: Keep-Alive
HTTP_HOST: XXXXXX.sakura.ne.jp
HTTP_USER_AGENT: Apache-HttpClient/UNAVAILABLE (java 1.4)
REMOTE_ADDR: XXX.XX.XX.XXX
REMOTE_HOST: emXXX-XX-XX-XXX.emobile.ad.jp
REMOTE_PORT: 17151
SCRIPT_FILENAME: /home/XXXX/www/XXXXXXXXXXXXXXXXXXX
SERVER_ADDR: XXX.XX.XX.XXX
SERVER_ADMIN: XXXXXX@sakura.ad.jp
SERVER_NAME: XXXXXX.sakura.ne.jp
SERVER_PORT: 80
SERVER_SOFTWARE: Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e
GATEWAY_INTERFACE: CGI/1.1
SERVER_PROTOCOL: HTTP/1.1
REQUEST_METHOD: GET
QUERY_STRING: arg=XXXXXX
REQUEST_URI: /XXXX.php?arg=XXXXXX
SCRIPT_NAME: /XXXX.php
PHP_SELF: /XXXX.php
REQUEST_TIME: 1366106161
argv: Array
argc: 1

URLConnetionの場合-----------------------------

PHPRC: /home/XXXXXX/www
PATH: /usr/local/bin:/usr/bin:/bin
DOCUMENT_ROOT: /home/XXXXXX/www
HTTP_ACCEPT_ENCODING: gzip
HTTP_CONNECTION: Keep-Alive
HTTP_HOST: XXXXXX.sakura.ne.jp
HTTP_USER_AGENT: Dalvik/1.4.0 (Linux; U; Android 2.3.4; ISW11M Build/4.5.1A-1_KDI-95_MR3-10)
REMOTE_ADDR: XXX.XX.XX.XXX
REMOTE_HOST: emXXX-XX-XX-XXX.emobile.ad.jp
REMOTE_PORT: 33594
SCRIPT_FILENAME: /home/XXXXX/www/cs/sn/count.php
SERVER_ADDR: XXX.XX.XX.XXX
SERVER_ADMIN: XXXXXX@sakura.ad.jp
SERVER_NAME: XXXXX.sakura.ne.jp
SERVER_PORT: 80
SERVER_SOFTWARE: Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e
GATEWAY_INTERFACE: CGI/1.1
SERVER_PROTOCOL: HTTP/1.1
REQUEST_METHOD: GET
QUERY_STRING: arg=XXXXXX
REQUEST_URI: /XXXX.php?arg=XXXXXX
SCRIPT_NAME: /XXXX.php
PHP_SELF: /XXXX.php
REQUEST_TIME: 1366106037
argv: Array
argc: 1

----------------------------------------
こんな感じ。細かいところで違ってるが、一番大きいのはやはりというべきかAgent。
HttpGetだとJavaとして、URLConnectionだとAndroidとしてリクエストしてるって感じだ。

HttpGetの場合
HttpClientからHttpParamsを引き出して
setParameter(CoreProtocolPNames.USER_AGENT, "XXXXXXXXXXXXXXXX" );
でエージェントをセットしてやることはできるので、それで用が足りるならそれもよし。
posted by みこあいさ at 15:49| Android開発