에서 실행되는 로컬 컴퓨터에서 웹 서비스를 실행하고 localhost:54722
있습니다.
Android 에뮬레이터에서 실행되는 앱에서 서비스를 호출하고 싶습니다.
10.0.2.2
앱에서 사용 하면 localhost에 액세스 한다는 것을 읽었 지만 포트 번호로는 작동하지 않는 것 같습니다. 라고 말합니다 HttpResponseException: Bad Request
.
에서 실행되는 로컬 컴퓨터에서 웹 서비스를 실행하고 localhost:54722
있습니다.
Android 에뮬레이터에서 실행되는 앱에서 서비스를 호출하고 싶습니다.
10.0.2.2
앱에서 사용 하면 localhost에 액세스 한다는 것을 읽었 지만 포트 번호로는 작동하지 않는 것 같습니다. 라고 말합니다 HttpResponseException: Bad Request
.
답변:
IP 주소 " 10.0.2.2
"를 사용하여 호스트 시스템에 액세스 할 수 있습니다 .
이것은 안드로이드 팀에 의해 이런 식으로 설계되었습니다. 따라서 웹 서버는 localhost에서 완벽하게 실행할 수 있으며 Android 앱에서 " http://10.0.2.2:<hostport>
" 를 통해 액세스 할 수 있습니다 .
에뮬레이터가 프록시 서버를 통해 인터넷에 액세스해야하는 경우 에뮬레이터의 확장 제어 화면에서 사용자 정의 HTTP 프록시를 구성 할 수 있습니다. 에뮬레이터가 열린 상태에서 추가 를 클릭 한 다음 설정 및 프록시 를 클릭 합니다 . 여기에서 고유 한 HTTP 프록시 설정을 정의 할 수 있습니다.
기본 AVD에 10.0.2.2를 사용하고 Genymotion에 10.0.3.2를 사용하십시오.
IIS Express에서 웹 응용 프로그램을 실행하는 Visual Studio에서 동일한 문제에 직면했습니다. 수정하려면 프로젝트 속성으로 이동 한 다음 디버그 탭을 클릭하고 http : // localhost : [YOUR PORT]를 http://127.0.0.1:[YOUR PORT]로 변경하고 안드로이드 URL을 http : / 로 설정해야합니다 . /10.0.2.2:[YOUR PORT]. 그것은 나를 위해 일했다.
http://localhost:5000/
Postman 및 iOS 시뮬레이터 를 통해 액세스합니다 . 이 솔루션은 Android 시뮬레이터에서 작동하며 서버 또는 시뮬레이터의 설정을 수정할 필요가 없습니다. 추가 작업없이 다른 컴퓨터로 빠르고 멋지 며 휴대 가능합니다.
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:*" />
기존 사이트를 수정하는 대신 두 번째 바인딩으로 추가해야합니다. 그렇지 않으면 VS가 추가 된 새 사이트 만 다시 추가합니다. (1)
또한 관리자로 VS를 실행해야 할 수도 있습니다.
Visual Studio Professional 2015에서 "Conveyor by Keyoti"를 설치하여 문제를 해결했습니다. 컨베이어는 외부 요청을 가능하게하는 포트 (45455)로 REMOTE 주소 (IP)를 생성합니다. 예:
컨베이어 (없이 안드로이드 에뮬레이터 네트워크에 또는에서 외부 태블릿 및 휴대 전화에서에서 당신 테스트 웹 응용 프로그램을 할 수 있습니다 http://10.0.2.2:<hostport>
)
단계는 다음 링크에 있습니다.
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
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">
로컬 호스트를 실행 한 후 http://localhost:[port number]/
포트 번호를 찾았습니다.
그런 다음 Command에서 IP 주소를 얻고 windows 명령을 열고 입력하십시오. ipconfig
필자의 경우 IP는 192.168.10.33
내 URL이 http://192.168.10.33 : [포트 번호] /입니다. Android에서 스튜디오는이 URL을 URL로 사용합니다. 그런 다음 에뮬레이터의 수동 프록시에서 URL과 포트 번호를 설정하십시오.
"BadRequest"는 일반적으로 서버 자체에서 전송 된 오류입니다. rfc 2616 참조
10.4.1 400 잘못된 요청
잘못된 구문으로 인해 서버에서 요청을 이해할 수 없습니다. 클라이언트는 수정없이 요청을 반복해서는 안됩니다.
따라서 서버에 연결되어 있지만 요청이 Expecet 양식에 맞지 않습니다. 연결을 만드는 방법, 포함 된 헤더 (있는 경우)를 모르지만 확인해야합니다.
도움이 더 필요한 경우 코드의 내용과 서버에 연결하는 데 사용되는 내용을 설명하면 큰 그림을 볼 수 있습니다.
여기에 같은 문제와 질문 - 대답했다 그 헤더의 내용 유형 그런게 세트입니다.
Android 에뮬레이터에서 IISExpress 웹 API에 액세스하는 방법을 보여 드리고자합니다. Visual Studio 2015를 사용하고 있습니다. Android Studio에서 Android Emulator를 호출합니다.
내가해야 할 일은 applicationhost.config 파일 의 바인딩 구성에 다음 줄을 추가하는 것입니다.
<binding protocol="http" bindingInformation="*:<your-port>:" />
그런 다음 IP4 주소를 확인하고 사용하여 Android 에뮬레이터에서 API에 액세스합니다.
요구 사항 : Visual Studio를 관리자 권한으로 실행해야합니다. 이 게시물 은 이 를 수행하는 완벽한 방법을 제공합니다.
자세한 내용 은 github에 대한 내 게시물 을 방문하십시오
도움이 되었기를 바랍니다.
Laravel Homestead 사용자 : Laravel을 Homestead와 함께 사용하는 사람이라면 에뮬레이터에서 192.168.10.10을 사용하여 앱 백엔드에 액세스 할 수 있습니다
그래도 작동이 안되는? 또 다른 좋은 해결책은 ngrok https://ngrok.com/ 을 사용하는 것입니다
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을 .
Android 에뮬레이터에서 localhost에 액세스하려면
AndroidManifest.xml에서 인터넷 권한 추가
<uses-permission android:name="android.permission.INTERNET" />
아래 언급 된 명령을 실행하여 시스템 IP 주소를 찾으십시오.
ifconfig | grep "inet " | grep -v 127.0.0.1
이 단계에서 얻은 IP 주소를 복사하십시오 (A).
시스템 에서 localhost
또는 127.0.0.1
시스템에서 액세스 할 수있는 백엔드 애플리케이션을 실행하십시오 .
이제 android studio에서 코드에서 사용하는 경우 URL을 바꾸거나 단계 (A)에서 얻은 IP 주소를 사용하여 웹 브라우저에서 열 수 있습니다. http://192.168.0.102:8080/
IP 주소 뒤에 PORT를 추가하는 것을 잊지 마십시오. 제 경우에는 앱이 8080 포트에서 실행 중이므로 포트 8080으로 (A)에서 얻은 IP를 추가했습니다.
localhost는 시작할 때 내 에뮬레이터에서 제대로 작동하는 것처럼 보였고 연결 거부 예외가 발생하기 시작했습니다. 에뮬레이터 브라우저에서 127.0.2.2를 사용했으며 에뮬레이터의 내 Android 앱에서이를 사용하면 다시 연결 거부 문제를 표시하기 시작했습니다. .
그런 다음 ifconfig를하고 ip 192.168.2.2를 사용했으며 완벽하게 작동했습니다.
아무도 여전히 이것을 찾고 있다면 이것이 나를 위해 일한 방법입니다.
연결된 장치 / 에뮬레이터와 관련하여 컴퓨터의 IP를 찾아야합니다. 에뮬레이터의 경우 다음 단계를 수행하십시오.
에뮬레이터에서 로컬 호스트에 액세스하려면이 IP를 제공하십시오. 포트는 서비스를 실행 / 게시하는 동안 제공 한 것과 동일합니다.
참고 # 1 : 방화벽 및 인바운드 규칙을 관리했는지 확인하십시오.
참고 # 2 : 컴퓨터를 다시 시작한 후이 IP를 확인하십시오. 어떤 이유로 든 "다음 IP 사용"을 제공 한 경우에도 호스트 전용 IP가 변경되었습니다.
서비스 계층에서 Visual Studio IIS Express를 사용할 때 발생하는 정확한 문제를 해결했습니다. 10.0.2.2를 가리키면 포트가 작동하지 않습니다. 다른 게시물에서 언급했듯이 IIS Express를 엉망으로 만드는 대신 IIS Express 앞에 프록시를 배치했습니다. 예를 들어, 아파치 또는 nginx. nginx.conf는 다음과 같습니다
# Mobile API
server {
listen 8090;
server_name default_server;
location / {
proxy_pass http://localhost:54722;
}
}
그런 다음 안드로이드는 내 IP 주소를 192.168.xx : 8090으로 가리켜 야합니다.
1) cmd에서 ipconfig 명령을 실행하십시오.
3) 그런 다음 VMWare 네트워크 어댑터 1의 IPv4 주소와 포트 번호를 차례로 사용하십시오.
내 경우 8080이므로 localhost를 사용하는 대신 8080
192.168.56.1:8080을 사용하고 있습니다
끝난.....
localhost
기본 액세스 문제가있는 사람이 에뮬레이터에서 사용할 수없는 이유를 설명하십시오 . 정교한 경우 다른 답변을 읽으십시오.
문제 : 에뮬레이터에는 자체 로컬 네트워크가 있으며 호스트 localhost
자체가 아니라 에뮬레이터에 매핑됩니다 !
해결책:
0.0.0.0
에뮬레이터의 네트워크에서 사용할 수 있도록 서버 바인딩ifconfig
Mac 용 명령192.168.1.10
하는 대신localhost
Android 에뮬레이터에서 IIS .NET 웹 서비스에 연결하려고 할 때도 같은 문제가 발생했습니다.
npm install -g iisexpress-proxy
iisexpress-proxy 53990 to 9000
IIS Express 포트를 9000으로 프록시하고 에뮬레이터에서 포트 9000에 액세스 "http://10.0.2.2:9000"
그 이유는 기본적으로 IIS Express는 네트워크 https://forums.asp.net/t/2125232.aspx?Bad+Request+Invalid+Hostname+when+accessing+localhost+Web+API 에서의 연결을 허용하지 않는 것 같습니다. + 또는 + Web + App + from + across + LAN