Android 에뮬레이터에서 localhost: 포트 액세스
로컬 컴퓨터에서 실행되는 웹 서비스를 실행 중입니다.localhost:54722
.
안드로이드 에뮬레이터에서 실행되는 앱에서 서비스를 호출하고 싶습니다.
를 사용하여 읽었습니다.10.0.2.2
앱에서 localhost에 액세스할 수 있지만 포트 번호와도 작동하지 않는 것 같습니다.라고 써있습니다HttpResponseException: Bad Request
.
IP 주소 "로 호스트 시스템에 액세스할 수 있습니다.10.0.2.2
".
이것은 Android 팀에 의해 이런 방식으로 설계되었습니다. 웹 될 수 에서 "라서웹서버는따를로완서벽 Android 에앱서다"를 수 .http://10.0.2.2:<hostport>
".
에뮬레이터가 프록시 서버를 통해 인터넷에 액세스해야 하는 경우 에뮬레이터의 확장 컨트롤 화면에서 사용자 지정 HTTP 프록시를 구성할 수 있습니다.에뮬레이터를 연 상태에서 추가를 클릭한 다음 설정 및 프록시를 클릭합니다.여기서 HTTP 프록시 설정을 정의할 수 있습니다.
사용하다10.0.2.2
및 기본 AVD 10.0.3.2
을
때부터10.0.2.2
Android용 보안 도메인이 아닙니다. API 28+의 네트워크 구성에서 보안되지 않은 도메인을 허용해야 합니다. 여기서 기본적으로 비 TLS 연결이 차단됩니다.
다음 구성을 사용할 수 있습니다.
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">
이 솔루션이 모든 Android Emulator 및 출시된 모든 Android SDK 버전에서 작동할 수 있을지 확신할 수 없지만 다음을 실행하는 것이 저에게 도움이 됩니다.
adb reverse tcp:54722 tcp:54722
에뮬레이터를 작동시켜야 합니다. 그러면 당신은 당신의 에뮬레이터를 작동시킬 수 있을 것입니다.localhost:54722
실행 중인 에뮬레이터 장치 내부.
Visual Studio에서 IIS Express에서 웹 앱을 실행하는 경우에도 동일한 문제가 발생했습니다. 이 문제를 해결하려면 프로젝트 속성으로 이동한 다음 http://localhost:[YOUR PORT]를 클릭하여 http://127.0.0.1:[YOUR PORT]로 변경하고 안드로이드 URL을 http:/10.0.2.2:[YOURPORT]로 설정해야 합니다.
IIS Express를 사용하는 경우 'localhost'만 사용하는 대신 모든 호스트 이름에 바인딩해야 할 수 있습니다.다음과 같은 훌륭한 답변을 확인하십시오.
https://stackoverflow.com/a/15809698/383761
IIS Express 자체에서 모든 IP 주소 및 호스트 이름에 바인딩하도록 합니다..config 파일(일반적으로 %userprofile%\)내 문서\IIExpress\config\applicationhost.config 또는 $(solutionDir).vs\config\applicationhost.config(Visual Studio 2015의 경우), 사이트의 바인딩 요소를 찾고 추가합니다.
<binding protocol="http" bindingInformation="*:8080:*" />
두 . 않으면 가 새 를 다시 만 하면 . 그렇지 않으면 VS가 새 사이트에(1)
또한 관리자로서 VS를 실행해야 할 수도 있습니다.
Visual Studio Professional 2015에 "Converter by Keoti"를 설치하여 해결했습니다.컨베이어는 외부 요청을 활성화하는 포트(45455)로 원격 주소(사용자 IP)를 생성합니다.예:
Android 웹 프로그램을 할 수 있습니다(Conveyer 사용 안 함).http://10.0.2.2:<hostport>
)
단계는 다음 링크에 있습니다.
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
에는 호를실같됩니다이다과음이 표시됩니다.http://localhost:[port number]/
여기서 포트 번호를 찾으셨습니다.
Command,에서 IP 주소를 " " "를 입력합니다.ipconfig
의 경우,는 저의경우, IP였습니다.192.168.10.33
따라서 내 URL은 http://192.168.10.33:[포트 번호]/가 됩니다.Android에서 스튜디오는 이 URL을 사용자의 URL로 사용합니다. 그런 다음 에뮬레이터의 수동 프록시에서 사용자의 URL과 포트 번호를 설정합니다.
지도를 만드는 것입니다.10.0.2.2
127.0.0.1
하지 않는localhost
웹를 따서웹서서구성다니합버로버라를on▁your▁server다▁so▁server▁configure에 서버로 구성하세요.127.0.0.1:54722
그리고 아닌localhost:54722
요..그 정도면 됐다.
로컬 호스트에서 웹 서버를 실행하고 있습니다.
에레이터를열사중로호연경에결우는려하를 하고 있습니다.192.168.x.x
즉, 로컬 IP 주소를 사용해야 합니다. 그렇고, 당신의 건그고렇의, 신당그.HttpResponseException (Bad Request)
호스트에 연결할 수 없다는 의미는 아닙니다.
일부 다른 오류로 인해 이 예외가 발생합니다.
Android Emulator에서 localhost에 액세스하려면 다음과 같이 하십시오.
AndroidManifest.xml에서 합니다.
<uses-permission android:name="android.permission.INTERNET" />
더하다
android:usesCleartextTraffic="true"
자세한 내용은 여기:다음 명령을 실행하여 시스템 IP 주소를 찾습니다.
ifconfig | grep "inet " | grep -v 127.0.0.1
이 단계에서 얻은 IP 주소 복사( A)
응용프로그램을 합니다. 백엔드 은 위수있백는실에서 수 .
localhost
또는127.0.0.1
사용자 시스템에서.이제 Android 스튜디오에서 코드에서 사용하는 경우 URL을 대체하거나 (A) 단계에서 얻은 IP 주소를 사용하여 웹 브라우저에서 열기를 시도할 수 있습니다. 이 http://192.168.0.102:8080/
IP 주소 뒤에 포트를 추가하는 것을 잊지 마십시오. 제 경우 앱이 8080 포트에서 실행되어 (A)에서 얻은 IP를 포트 8080에 추가했습니다.
을 URL로 .10.0.2.2:portNr
portNr =
ASP에 의해 지정된 포트.가 NET Development Server에서 입니다.localhost:3229/Service.svc
제 은 그서제은 URL입니다.10.0.2.2:3229
저는 이런 식으로 문제를 해결했습니다.
도움이 되었으면 합니다...
"BadRequest"는 일반적으로 서버 자체에서 전송되는 오류입니다. rfc 2616을 참조
10.4.1400 잘못된 요청
잘못된 구문으로 인해 서버에서 요청을 이해할 수 없습니다.고객은 수정 없이 요청을 반복해서는 안 됩니다.
서버에 연결되어 있지만 요청이 예상 양식에 맞지 않습니다.연결을 생성하는 방법과 포함된 헤더(있는 경우)를 알 수 없지만 확인해야 합니다.
더 많은 도움이 필요한 경우 코드의 내용과 코드가 서버에 연결하는 데 사용하는 내용을 설명하면 전체적인 상황을 파악할 수 있습니다.
여기 동일한 문제가 있는 질문이 있습니다. 즉, 헤더에 내용 유형이 설정되지 않았다는 답변입니다.
cmd 단위로 ipconfig 명령 실행
당신은 다음과 같은 결과를 얻을 것입니다.
그런 다음 VMWare 네트워크 어댑터 1의 IPv4 주소와 포트 번호를 사용합니다.
내 경우에는 8080이므로 localhost를 사용하는 대신: 8080
192.168.56.1:8080을 사용합니다.
완료...
Android Emulator에서 IISpress 웹 API에 액세스하는 방법을 보여드리겠습니다.Visual Studio 2015를 사용하고 있습니다.Android Studio에서 Android Emulator를 호출합니다.
다음 행을 applicationhost.config 파일의 바인딩 구성에 추가하기만 하면 됩니다.
<binding protocol="http" bindingInformation="*:<your-port>:" />
그런 다음 IP4 주소를 확인하고 Android 에뮬레이터에서 API에 액세스합니다.
요구 사항: Visual Studio를 관리자로 실행해야 합니다.이 게시물은 이를 위한 완벽한 방법을 제공합니다.
자세한 내용은 github에 있는 제 게시물을 방문해주세요.
이게 도움이 되길 바랍니다.
라라벨 홈스테드 사용자: 라라벨을 홈스테드와 함께 사용하는 사용자는 에뮬레이터에서 192.168.10.10을 사용하여 앱 백엔드에 액세스할 수 있습니다.
아직도 안 돼요?또 다른 좋은 해결책은 ngrok https://ngrok.com/ 을 사용하는 것입니다.
Windows 10을 개발 플랫폼으로 사용하고 있는데 에뮬레이터에서 10.0.2.2: 포트에 액세스하는 것이 예상대로 작동하지 않으며 이 질문의 다른 솔루션에서도 동일한 결과가 나타납니다.
몇 시간 동안 파헤친 결과, 에뮬레이터 시작 명령에 -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
이유설의 이유에 설명localhost
에뮬레이터에서는 기본적인 액세스 문제가 있는 사용자는 사용할 수 없습니다.복잡한 경우에는 다른 답변을 참조하십시오.
문제:에뮬레이터는 자체 로컬 네트워크와localhost
자체는 에뮬레이터에 매핑되지만 호스트에는 매핑되지 않습니다!
솔루션:
- 를 서버바대에 .
0.0.0.0
할 수 있도록 . - : 노북의외 IP 소오기:
ifconfig
명 령 - Android(또는 Flutter 앱)에서 다음과 같은 외부 인터페이스의 IP 주소를 사용합니다.
192.168.1.10
에localhost
IIS에 연결할 때 동일한 문제가 발생했습니다.Android 에뮬레이터의 NET 웹 서비스.
npm install -g iisexpress-proxy
iisexpress-proxy 53990 to 9000
하고 IIS와 같은 에서 포트 ."http://10.0.2.2:9000"
기본적으로 IIS Express가 네트워크 https://forums.asp.net/t/2125232.aspx?Bad+Request+Invalid+Hostname+when+accessing+localhost+Web+API+or+Web+App+from+across+LAN 의 연결을 허용하지 않기 때문인 것 같습니다.
localhost는 시작할 때 내 에뮬레이터에서 잘 작동하는 것 같았고 그리고 나서 나는 연결 거부 예외를 받기 시작했고 에뮬레이터 브라우저에서 127.0.2.2를 사용했고 그것은 작동했고 내가 이것을 에뮬레이터의 안드로이드 앱에서 사용했을 때 다시 연결 거부 문제를 보여주기 시작했습니다.
그런 다음 ifconfig를 실행하고 ip 192.168.2.2를 사용했는데 완벽하게 작동했습니다.
잘못된 요청은 일반적으로 보내는 데이터의 형식이 올바르지 않음을 의미합니다.데이터 매핑이 일치하지 않을 수 있습니다.잘못된 요청이 수신되면 서버에 연결할 수 있지만 요청이 제대로 전송되지 않는 것입니다.
아직도 이걸 찾고 있는 사람이 있다면, 이것이 저에게 효과가 있었던 방법입니다.
연결된 장치/에뮬레이터와 관련하여 컴퓨터의 IP를 찾아야 합니다.에뮬레이터의 경우 다음 단계를 수행합니다.
- VM 가상 상자로 이동 -> 목록에서 연결된 디바이스를 선택합니다.
- 설정 -> 네트워크 -> 장치가 연결된 네트워크를 확인합니다.저에게는 'VirtualBox 호스트 전용 이더넷 어댑터 #2'였습니다.
- virtualbox(가상 상자)에서 Files(파일)->Preferences(기본 설정)->Network(네트워크)->Host-Only Networks(호스트 전용 네트워크)로 이동하고 위 단계에서 지정한 네트워크의 IPv4를 확인합니다.(호버링하면 정보를 얻을 수 있습니다.)
에뮬레이터에서 로컬 호스트에 액세스하려면 이 IP를 제공합니다.포트는 서비스를 실행/게시하는 동안 제공한 것과 동일합니다.
참고 #1: 방화벽 및 인바운드 규칙을 처리했는지 확인합니다.
참고 #2 : 기기를 다시 시작한 후 이 IP를 확인하십시오.어떤 이유로 "다음 IP 사용"을 제공한 경우에도 호스트 전용 IP가 변경되었습니다.
서비스 계층에서 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.x.x:8090으로 가리켜야 합니다.
node express 또는 angular-cli와 같은 타사 패키지를 사용하는 경우 시스템의 IP를 찾고 서버 시작 구성 내의 해당 IP에 호스트를 연결해야 합니다(localhost 대신).그런 다음 IP를 사용하여 에뮬레이터에서 시작합니다.예를 들어, 다음을 사용해야 했습니다.ng serve -H 10.149.212.104
각-cli를 사용합니다. 제가: 그면내사에뮬이에서터레용한:http://10.149.212.104:4200
저에게 효과가 있었던 것은 다음 두 가지였습니다.
- https로 리디렉션을 사용하지 않도록 설정합니다.localhost에서 http 포트에 액세스하려고 하면 기본적으로 https로 리디렉션됩니다.로컬에 대한 https 구성을 제거하거나 OS에 대한 리디렉션을 비활성화하여 비활성화합니다.
- 방화벽을 비활성화합니다.요즘에는 방화벽 설정의 여러 계층이 있습니다.방화벽에서 우회할 수 있는 포트 또는 앱을 구체적으로 지정할 수 있는지 확인합니다.
Asp와 함께 작업하는 경우.Net Web API는 프로젝트 내부의 .vs/config 폴더에서 포트 설정에 따라 이 행을 수정합니다.포트 1234를 사용하고 IIS에서 설정한 프로젝트 폴더에 대한 physicalPath가 "D:\내 프로젝트\사이트 이름"을 입력한 다음
<site name="YourSiteName" id="1">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="D:\My Projects\YourSiteName" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:1234:*" />
</bindings>
</site>
Android 스튜디오에서 "http://10.0.2.2:1234"로 api에 액세스합니다.
언급URL : https://stackoverflow.com/questions/6760585/accessing-localhostport-from-android-emulator
'programing' 카테고리의 다른 글
내부 조인 쿼리의 반대쪽 (0) | 2023.08.05 |
---|---|
"개발자 디스크 이미지를 찾을 수 없습니다." (0) | 2023.08.05 |
Spring에서 @Order 주석은 어떤 용도로 사용됩니까? (0) | 2023.08.05 |
알려진 기본 속성이 아니므로 'ng-forOf'에 바인딩할 수 없습니다. (0) | 2023.08.05 |
테이블 SQL 서버의 상위 1개 레코드 업데이트 (0) | 2023.08.05 |