スタンドアローンアプリケーションにするとurlreadで通信エラーが発生する
2 views (last 30 days)
Show older comments
以下の様にGoogleMapsAPIを使用して、ある住所の緯度経度を取得しています。
client,signatureへの設定値は置き換えています。
addressは「urlencode」でエンコードしています。
urlread('https://maps.googleapis.com/maps/api/geocode/json?address=%E6%B2%B3%E5%8F%A3%E6%B9%96&client=・・・・・&signature=・・・・・')
Matlabスクリプトとして実行した際は正しく動作しますが、
スタンドアローンアプリケーション化後に実行しますと
「URL のダウンロード エラー。」と通信異常が発生してしまいます。
何が悪いのかわからず、どなたか助けて頂けないでしょうか?
「これ試したら?」等のアドバイスでも結構ですので、よろしくお願いいたします。
尚、私の環境は以下になります。
Matlab:R2017b
コンパイラ:MinGW-w64 5.3
また、プロキシサーバーを利用するため、MatlabのWeb設定で以下を
設定しております。
・プロキシホスト:IPアドレス
・プロキシポート:ポート番号
・ユーザー名
・パスワード
何か不足情報があればご指摘ください。
よろしくお願いいたします。
0 Comments
Answers (1)
Kojiro Saito
on 8 Feb 2019
MATLABからではプロキシサーバー経由でGoogle Map APIにアクセスできていますが、コンパイルしたスタンドアロンアプリケーションではプロキシサーバーを見に行かないので通信に失敗しているのではないでしょうか。
こちらの回答の最後の段にあるように、コンパイルしたアプリケーションでもプロキシサーバー経由になるように、以下のコードを入れてみてはいかがでしょうか。
if isdeployed
com.mathworks.mlwidgets.html.HTMLPrefs.setUseProxy(true)
com.mathworks.mlwidgets.html.HTMLPrefs.setProxyHost('HostName')
com.mathworks.mlwidgets.html.HTMLPrefs.setProxyPort('Port')
end
もしこれを追加しても通信に失敗するようでしたら、ユーザー名とパスワードも設定する必要があると思います。
その場合はif isdeployedの中に
com.mathworks.mlwidgets.html.HTMLPrefs.setUseProxyAuthentication(true)
com.mathworks.mlwidgets.html.HTMLPrefs.setProxyUsername('YOUR_USER_NAME')
com.mathworks.mlwidgets.html.HTMLPrefs.setProxyPassword('YOUR_PASSWORD')
も追加してみてください。
他の方にスタンドアロンアプリケーションを配布する場合は、KenShiさんのユーザー名を使い回すより、その方のユーザー名を入力させるほうが安全だと思いますので、YOUR_USER_NAMEやYOUR_PASSWORDの部分はユーザーに入力させるようにMATLAB関数を変えたほうが良いと思います。
3 Comments
Kojiro Saito
on 8 Feb 2019
MATLABのJVMのバージョンの違いによる挙動の違いだと思います。
Java 8 Update 111(1.8.0_111)から、HTTPSのトンネルの設定時にBasic認証を必要とするプロキシがデフォルトで成功しないように変わったのですが、MATLABのR2017b (JVM 1.8.0_121)ではその影響のため、プロキシサーバーの設定を入れていないとコンパイル時に通信エラーが出て、R2015aSP1 (JVM 1.7.0_60)はその影響がないため、コンパイル時にプロキシサーバーの設定を入れなくても通信が成功する、と考えられます。
See Also
Categories
Find more on Web アクセス in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!