だれか解決方法を教えてください。
以下の2つにURLを与えた時の動作がよくわかりません。
勝手にURLエンコードをしているようなのですがなんなのだろう・・・。
・Qt.openUrlExternally
・XmlListModel.source
といっても分かりにくいので具体例
Qt.openUrlExternallyの場合
指定したアドレス : https://relog.xii.jp/?param=a%3Db
ブラウザに渡るアドレス : https://relog.xii.jp/?param=a%253Db
なにか、増えてます。
なんと「%」がURLエンコードされて「%25」になってしまっているのです。
ちなみに「%3D」=「=」です。
じゃあと、下のようにすると
指定したアドレス : https://relog.xii.jp/?param=a=b
ブラウザに渡るアドレス : https://relog.xii.jp/?param=a=b
意味不明です。
ある意味ここからが本題です。
Twitterクライアントを作ってみていたのでOAuthでサインした情報をURLに含めないといけません。
で、シグネチャには記号が含まれるのです。
取得したデータを解析して表示するのはXmlListModelを使用するととっても便利なので使いたいです。
なのに、こんな事が起こります。
XmlListModel.sourceの場合
指定したアドレス :
http://api.twitter.com/1/statuses/home_timeline.xml?oauth_signature_method=HMAC-SHA1
&oauth_consumer_key=hogehoge
&oauth_token=hogehoge
&oauth_timestamp=1311414136
&oauth_nonce=JObovQ
&oauth_signature=95qFNzWfhe6%2F0HsRadQrtepWXk%3D
実際に解釈されていると思われるアドレス :
http://api.twitter.com/1/statuses/home_timeline.xml?oauth_signature_method=HMAC-SHA1
&oauth_consumer_key=hogehoge
&oauth_token=hogehoge
&oauth_timestamp=1311414136
&oauth_nonce=JObovQ
&oauth_signature=95qFNzWfhe6%252F0HsRadQrtepWXk%253D
実際にこれだとデータは取得できませんでした。
なので、こんな風にデコードした状態にすると取得できました。
指定したアドレス :
http://api.twitter.com/1/statuses/home_timeline.xml?oauth_signature_method=HMAC-SHA1
&oauth_consumer_key=hogehoge
&oauth_token=hogehoge
&oauth_timestamp=1311414136
&oauth_nonce=JObovQ
&oauth_signature=95qFNzWfhe6/0HsRadQrtepWXk=
これで事が済んでいればOKだったのですが、下の場合はNGでした。
指定したアドレス :
http://api.twitter.com/1/statuses/home_timeline.xml?oauth_signature_method=HMAC-SHA1
&oauth_consumer_key=hogehoge
&oauth_token=hogehoge
&oauth_timestamp=1311414136
&oauth_nonce=JObovQ
&oauth_signature=95qFNzWfhe6/0HsRadQrt+epWXk=
もー、意味不明です。
どうやら、「+」だけはエンコードしてくれないようです。
回避策としてとりあえず考えたのは
「XmlListModel.xml」というパラメータがあってXMLを直接していして表示させる機能があります。
なので、予め「XMLHttpRequest」を使用してXMLを取得して与えます。
これなら一応やりたいことはできるのですがなんとなく釈然としません。
こんな時はどうするべきなんでしょうか?
追記
調べてみるから再現するサンプルを~とご依頼を受けたので作ってみてわかったこと。
どうやら、何でもかんでもURLエンコードしているわけではなく、少なくとも「=」「+」「%」「/」の4文字の中では「%」のみがエンコードされるようです。
その他はそのままサーバーへ投げられてました。
以下のような感じになります。
指定したアドレス :
http://api.twitter.com/1/statuses/home_timeline.xml?oauth_signature_method=HMAC-SHA1
&oauth_consumer_key=hogehoge
&oauth_token=hogehoge
&oauth_timestamp=1311414136
&oauth_nonce=JObovQ
&oauth_signature=95qFNzWfhe6/0HsRadQrtepWXk%3D
実際に解釈されていると思われるアドレス :
http://api.twitter.com/1/statuses/home_timeline.xml?oauth_signature_method=HMAC-SHA1
&oauth_consumer_key=hogehoge
&oauth_token=hogehoge
&oauth_timestamp=1311414136
&oauth_nonce=JObovQ
&oauth_signature=95qFNzWfhe6/0HsRadQrtepWXk%253D
@task_jpさんが調べてくれたのですが、バグレポートでも話題になっているようです。
-> Issue with QUrl percent encoding in TolerantMode
僕も1票いれてきましたw