カテゴリー: プログラミング

URLで使用出来る文字数の上限は(´・ω・`)?

GAEからはてなハイクに投稿するツールを作り、
それを3DSブラウザからテストしているが、
時々MalformedURLExceptionで投稿に失敗することがある。

それは決まって投稿する内容が長い時だった。


それでまぁぐぐってみたらドンピシャではないけれども

・IE で使用できる URL の長さは最大 2083文字である
・IE で使用できるパスの長さは 最大 2048文字である

[IE] URL に使用可能な文字数は最大 2,083 文字

というような情報があった。

TIPS » Blog Archive » URL の最大長は何文字?の方にも
これ絡みの情報があったが、今行ったら接続出来ない。
アドレスが違うのかなと思ったけどもホームページ自体が表示されないので
週末のサーバーメンテとかかな?取り敢えず


まあ何はともあれ、ブラウザとサーバによって
URLに使用出来る文字数の上限は変わるということだ。

最初は3DSブラウザの問題かと思っていたが、よくよく考えてみたら
URL文字列を生成しているのもMalformedURLExceptionを起こしてるのもGAE上だ。

メッセージは"Invalid URL specified"で、エラーを起こしてる箇所は

at com.google.appengine.api.urlfetch.URLFetchServiceImpl.
convertApplicationException(URLFetchServiceImpl.java:120)

つーことはGAEのURLFetchの制限なんかな?


取り敢えず回避法が分からないので何文字まで入力可能かを試した。

ハイクに投稿するために使う文字列で定形なのは、
http://h.hatena.ne.jp/api/statuses/update.xml?keyword=が54文字
&status=が8文字で
合計62文字

投稿テストを繰り返し本文部分の最大値もわかった。
(全角20文字+改行) x 10 + 全角13文字 + 半角5文字

パーセントエンコードすると
全角1文字が半角9文字
改行が半角6文字に変換されるので

全角213x9 + 改行10x6 + 5 = 1917+60+5=1982

これにキーワードに指定した"test"の4文字を加えて1986文字

定形文字列 62 + 可変文字列 1986 = 2048文字

つまりGAEでURLFetchで使用可能な文字列の最大値は半角2048文字(バイト)か


ブラウザ自身の使用可能文字数も調べたいところではあるが、
めどいので気が向いたら実験してみよう。

一応今作ってるツールに関して言えばこの情報だけでいいし。
キーワードと本文で使える文字数は全角220+半角6で改行を使うと
更に減るということで。

これにフォトライフ記法で画像1枚が半角40文字だから…
違うな、これはてなIDに依存して長さが変わるな…_| ̄|○

まあいい、取り敢えず最大値計算してalertを出すくらいにしておこう (ヽ'ω`)