MATLAB Answers

KenShi
0

スタンドアローンアプ​リケーションにすると​urlreadで通信​エラーが発生する

Asked by KenShi
on 8 Feb 2019
Latest activity Commented on by KenShi
on 12 Feb 2019
以下の様に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

Sign in to comment.

1 Answer

Answer by 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

KenShi
on 8 Feb 2019
ご回答を頂き、ありがとうございます。
コードでプロキシの設定ができるとは知らなかったので試してみます。
また、ご存じであれば教えて頂きたいのですが、実は以下環境時は
スタンドアプリケーションにしても本問題は発生しませんでした。
Matlabバージョンまたはコンパイラによって違いがあるのでしょうか?
Matlab:R2015aSP1
コンパイラ:visual studio
ご確認宜しくお願い致します。
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)はその影響がないため、コンパイル時にプロキシサーバーの設定を入れなくても通信が成功する、と考えられます。
KenShi
on 12 Feb 2019
ご回答ありがとうございます。理解いたしました。
尚、ご教示頂きましたコードにプロキシ設定を入れる方法を試しましたが、状況変わらず、通信異常が発生してしまいます。
コードに入れたプロキシ設定の妥当性を確認するため、一旦MatlabのWeb設定をすべてクリア後、ご教示いただいたコードにてプロキシ設定,ユーザー名,パスワード設定も実施したところ(「if isdeployed」は入れず)、通信異常が発生してしまいますが、MatlabのWeb設定を開くとプロキシ,ユーザー名,パスワードは設定されており(2つのチェックボックスもONになっており)、「OK」ボタン押下後は通信異常は発生しないという、よくわからない動作となります。
MatlabのWeb設定画面にて「OK」ボタンではなく「接続ボタン」を押下後に「キャンセルボタン」を押下した際も通信異常は発生しなくなります。
一度、正常に通信できた後は通信異常は発生しません。
上記のような状況で、こちらのプロキシサーバーの問題かも知れませんが、何か解決策をご存知でしょうか?
度々恐れ入りますが、ご教示いただけますと幸いです。
よろしくお願いいたします。

Sign in to comment.