今回の記事はFlutterをAndroid Studioを用いてFlutterでhttp通信を行い、ローカルサーバにpost通信を行う際に発生したエラーに関しての参考記事です。
SocketExceptionエラー
基本的にhttp通信がうまく行っていない場合に起きるエラーになっております。http通信先のURLを正しいものに変更する必要があります。
私の場合はFlutter(AndroidStudioエミュレータ)からFlask(localhost)へのpost通信次に発生しました。
SocketExceptionエラー回避方法
原因としてはflask側でローカルホストのURLを「http://0.0.0.0:5000」で設定していたので、ローカルサーバはもちろんこのURLにPOST通信を行うことで可能になると考えていました。しかし、Android Studioのエミュレータは「ホストループバックインターフェイス=要はlocalhost」のエイリアスとして10.0.2.2を持っているそうです。その為、通信先としては「http://10.0.2.2:5000」を設定する必要があったということです。
コードは下記です。
Future<String> uploadImage() async {
String url = "http://10.0.2.2:5000/";
var request = http.MultipartRequest('POST', Uri.parse(url));
var res = await request.send();
}
#flask
from flask import Flask, request
app = Flask(__name__)
@app.route('/',methods=["POST"])
def hello():
print("疎通")
return "hello"
if __name__ == "__main__":
app.run()
これでローカルサーバを立ててからhttp通信を行うことで、POST通信ができていることが確認できるはずです。
他にもflutterを用いて実践的な記事を書いておりますので気になる方は他の記事もご確認してみてください。
コメント