web-dev-qa-db-ja.com

Androidエミュレーターからlocalhost:portにアクセスする

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

Androidエミュレーターで実行されているアプリからサービスを呼び出したい。

アプリで10.0.2.2を使用するとlocalhostにアクセスしますが、ポート番号でも機能しないようです。 HttpResponseException: Bad Requestと表示されます。

189
Robin

IPアドレス「10.0.2.2」でホストマシンにアクセスできます。

これは、Androidチームによってこのように設計されています。したがって、ウェブサーバーはローカルホストで完全に実行でき、Androidアプリから「http://10.0.2.2:<hostport>」経由でアクセスできます。

エミュレータがプロキシサーバー経由でインターネットにアクセスする必要がある場合は、エミュレータの[拡張コントロール]画面からカスタムHTTPプロキシを構成できます。エミュレータを開いた状態で、Moredots をクリックし、SettingsおよびProxyをクリックします。ここから、独自のHTTPプロキシ設定を定義できます。 screen-shot for HTTP config

354
Akhil Jain

デフォルトのAVDには10.0.2.2を使用し、Genymotionには10.0.3.2を使用します

51
Vinod Joshi

IIS Expressを使用している場合は、単に「localhost」ではなく、すべてのホスト名にバインドする必要があります。この細かい答えを確認してください:

https://stackoverflow.com/a/15809698/383761

すべてのIPアドレスとホスト名にバインドするようにIIS Express自体に伝えます。 .configファイル(通常%userprofile%\ My Documents\IISExpress\config\applicationhost.config、またはVisual Studio 2015の場合は$(solutionDir).vs\config\applicationhost.config)で、サイトのバインディング要素を見つけて追加します

<binding protocol="http" bindingInformation="*:8080:*" />

既存のバインディングを変更するのではなく、2番目のバインディングとして追加するようにしてください。そうしないと、VSは(1)を追加した新しいサイトを再追加するだけでなく、VSを管理者として実行する必要があります。

13
Hugh Jeffner

Visual Studio Professional 2015に「Conveyor by Keyoti」をインストールすることで解決しました。Conveyorは、外部要求を有効にするポート(45455)でリモートアドレス(IP)を生成します。例:

enter image description here

Conveyorを使用すると、ネットワーク上の外部タブレットや携帯電話から、またはAndroidエミュレーター(http://10.0.2.2:<hostport>なし)からWebアプリケーションをテストできます。

手順は次のリンクにあります。

https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti

10
Ronny Morán

IIS ExpressでWebアプリを実行するVisual Studioで同じ問題に直面しました。修正するには、プロジェクトのプロパティに移動し、[デバッグ]タブをクリックして、 http:// localhost:[YOUR PORT]を http://127.0.0.1:[YOUR PORT]およびAndroid urlを http://10.0.2.2:[YOUR PORT]に設定します。それは私のために働いた。

ローカルホストでウェブサーバーを実行しています。

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

他のいくつかのエラーがこの例外につながります。

8
Marco

問題は、Androidエミュレーターが10.0.2.2127.0.0.1にマップし、notlocalhostにマップすることです。したがって、Webサーバーを127.0.0.1:54722ではなくlocalhost:54722でserveronに設定します。それはそれを行う必要があります。

6
Cobus Kruger

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

10.4.1 400 Bad Request

構文が正しくないため、サーバーがリクエストを理解できませんでした。クライアントは、変更せずにリクエストを繰り返すべきではありません。

したがって、サーバーへの正常な接続を取得しましたが、リクエストはエキスパートフォームに適合しません。接続をどのように作成するか、どのヘッダーが含まれているか(もしあれば)はわかりませんが、確認する必要があります。

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

ここ は同じ問題の質問です。答えは、ヘッダーにcontent-typeが設定されていなかったことです。

3

uRLを10.0.2.2:portNrとして設定する必要があります

portNr = ASP.NET開発サーバーによって指定されたポート。現在のサービスはlocalhost:3229/Service.svcで実行されています。

だから私のURLは10.0.2.2:3229です

この方法で問題を修正しました

私はそれが役立つことを願っています...

3
lomec

ローカルホストを実行した後、ここでhttp://localhost:[port number]/を取得し、ポート番号を見つけました。

次に、CommandからIPアドレスを取得し、windowsコマンドを開いてipconfigenter image description here

私の場合、IPは192.168.10.33であったため、URLは http://192.168.10.33:[port number] /になります。 Androidでは、スタジオはこのURLをURLとして使用します。その後、エミュレータの手動プロキシでURLとポート番号を設定します。

enter image description here

2

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

まだ動かない?別の良い解決策は、ngrokを使用することです https://ngrok.com/

1
Nomi

10.0.2.2はAndroidのセキュアドメインではないため、デフォルトでは非TLS接続が禁止されているAPI 28+のネットワーク構成で非セキュアドメインを許可する必要があります。

次の構成を使用できます。

Main/res/xml/network_security_config.xmlに次のように新しいファイルを作成します。

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
        <domain includeSubdomains="true">10.0.2.2</domain>
    </domain-config>
</network-security-config>

AndroidManifest.xmlでそれをポイントします

<application
......
......
Android:networkSecurityConfig="@xml/network_security_config">
1
İsmail Yavuz

AndroidエミュレーターからIISExpress Web APIにアクセスする方法を紹介したいと思います。 Visual Studio 2015を使用しています。そして、Android St​​udioからAndroidエミュレーターを呼び出します。

applicationhost.configファイルのバインディング設定に次の行を追加するだけです

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

次に、IP [4]アドレスを確認して使用し、AndroidエミュレーターからAPIにアクセスします

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

詳細については、githubで my post をご覧ください。

お役に立てれば。

1

不正な要求とは、通常、送信しているデータの形式が正しくないことを意味します。データマッピングが一致していない可能性があります。不正なリクエストを受け取っている場合は、サーバーに接続できることを意味しますが、リクエストは適切に送信されていません。

0
karthik

node expressやangular-cliなどのサードパーティのパッケージを使用している場合は、マシンのIPを見つけ、ホストをサーバーの起動構成内でそのホストに接続する必要があります(localhostの代わりに)。次に、IPを使用してエミュレーターから起動します。たとえば、angular-cliを使用するには、ng serve -H 10.149.212.104を使用する必要がありました。次に、使用したエミュレータから:http://10.149.212.104:4200

0
Helzgate

サービスレイヤーが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;
    }
  }

その後、Androidは192.168.x.x:8090として私のIPアドレスを指す必要があります

0
Denis Wang

開発プラットフォームとしてWindows 10を使用していますが、エミュレータの10.0.2.2:portにアクセスしても期待どおりに動作せず、この質問の他のソリューションでも同じ結果になります。

数時間掘り下げた後、エミュレータの起動コマンドに-writable-system引数を追加すると、うまくいくことがわかりました。

以下のようなコマンドラインでエミュレーターを起動する必要があります。

 emulator.exe -avd <emulator_name> -writable-system

次に、エミュレーターで、LAN IPアドレスとバインディングポートを使用して、ホストマシンで実行されているAPIサービスにアクセスできます。

http://192.168.1.2:<port>

これがお役に立てば幸いです。

コマンドラインからのエミュレータの起動について: https://developer.Android.com/studio/run/emulator-commandline

0
winiex

1)cmdでipconfigコマンドを実行します

2)このような結果が得られます enter image description here

3)次に、VMWareネットワークアダプター1のIPv4アドレスの後にポート番号を使用します

私の場合は8080なので、localhost:8080を使用する代わりに

192.168.56.1:8080を使用しています

enter image description here

完了.....

0
Ameya Salagre

誰かがまだこれを探しているなら、これは私のために働いた方法です。

接続しているデバイス/エミュレータに関して、マシンのIPを見つける必要があります。エミュレーターの場合、以下の手順に従うことです。

  1. VM Virtualボックスに移動->リストで接続されたデバイスを選択します。
  2. [設定]-> [ネットワーク]->デバイスが接続されているネットワークを確認します。私にとっては「VirtualBox Host-Only Ethernet Adapter#2」でした。
  3. Virtualboxで、Files-> Preferences-> Network-> Host-Only Networksに移動し、上記のステップで指定されたネットワークのIPv4を見つけます。 (ホバリングすることで情報を取得できます)

このIPを提供して、エミュレーターからローカルホストにアクセスします。ポートは、サービスの実行/公開中に指定したものと同じです。

注#1:ファイアウォールとインバウンドルールに注意してください。

注#2:マシンを再起動した後、このIPを確認してください。何らかの理由で、「次のIPを使用」を指定した場合でも、ホストオンリーIPが変更されました。

0
skillworks

必要なIPをWindowsタスクマネージャーで(ctrl + alt + delを押して)見つけるには、[パフォーマンス]タブで調べます。 。 。

0
elyar abad