Androidエミュレータからのlocalhost:portへのアクセス


Answers

デフォルトのAVDに10.0.2.2、Genymotionに10.0.3.2を使用

Question

localhost:54722で動作するローカルマシン上でWebサービスを実行しています。

私はAndroidのエミュレータで動作するアプリからサービスを呼びたいと思っています。

私は、アプリケーションで10.0.2.2を使用するとlocalhostにアクセスするが、それはポート番号でもうまく動作しないと読んでいる。 それはHttpResponseException: Bad Request言う。




AndroidエミュレータからIISExpress Web APIにアクセスする方法を示したいと思います。 私はVisual Studio 2015を使用しています。そしてAndroid StudioからAndroid Emulatorを呼び出します。

私がする必要があるのは、 applicationhost.configファイルのバインディング設定に次の行を追加することです

<binding protocol="http" bindingInformation="*:<your-port>:" />

次に、IP4アドレスをチェックして使用し、AndroidエミュレータからAPIにアクセスします

要件: Visual Studioを管理者として実行する必要があります。 この投稿はこれを行うための完璧な方法を示しています。

詳細は、githubに関する私の記事をご覧ください。

お役に立てれば。




「BadRequest」は、通常はサーバー自身が送信したエラーです。「 rfc 2616 」を参照してください。

10.4.1 400リクエストが間違っています

不正な構文のため、要求をサーバーが理解できませんでした。 クライアントは変更を加えずに要求を繰り返してはならない(SHOULD NOT)。

サーバーへの接続は正常ですが、要求がexpecetフォームに適合していません。 私はどのように接続を作成するか、どのヘッダが含まれているかはわかりませんが、チェックする必要があります。

より多くのヘルプが必要な場合は、コードの内容とサーバーへの接続に使用する内容を説明してください。

ここで同じ問題の質問があります。答えは、ヘッダーにコンテンツタイプが設定されていないということです。




私は、サービス層がVisual Studio IIS Expressを使用しているときに問題を正確に解決しました。 10.0.2.2:ポートは動作しません。 他の記事で述べたようにIIS Expressを邪魔するのではなく、IIS Expressの前にプロキシを置くだけです。 たとえば、apacheまたはnginxです。 nginx.confは次のようになります

 # Mobile API
 server { 
    listen       8090;
    server_name  default_server;

    location / {
        proxy_pass http://localhost:54722;
    }
  }

それでアンドロイドは私のIPアドレスを192.168.xx:8090とする必要があります







悪い要求は、一般に、送信しているデータの形式が間違っていることを意味します。 データのマッピングが一致していない可能性があります。 悪い要求がある場合は、サーバーに接続できても、要求が正しく送信されていないことを意味します。




Laravel Homesteadユーザーの場合:Laravel with homesteadを使用している場合、192.168.10.10のエミュレータを使用してアプリケーションのバックエンドにアクセスできます




私は私のlocalhost上で動作しているWebサーバーを持っています。

エミュレータを開いてローカルホストに接続したい場合は、 192.168.xxを使用しています。 つまり、あなたのローカルIPアドレスを使用する必要があります。 ちなみに、あなたのHttpResponseException (Bad Request)は、ホストが到達可能でないことを意味しません。

その他のエラーによってこの例外が発生します。




Links