flutter 개발 중 내부 서버와 http 통신을 하려고 했는데 발생한 에러.

https 서버도 열어놨었는데 내부 서버라 인증서 문제로 http 서버를 열어서 하는데 http 통신도 안되는거..

http 통신이라도 해결해보자

 

[root]\android\app\src\main 의

 

AndroidManifest.xml 파일을 수정

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.yourapp">
   <application
        android:label="yourapp"
        android:usesCleartextTraffic="true" // <-- 이 부분
        android:icon="@mipmap/ic_launcher">
        <activity
        .
        .
        .
        .
        

 

이 부분 이라고 작성한 부분을 추가하면 된다

 

android:usesCleartextTraffic="true"

 

 

iOS의 경우는 테스트 안해봐서 모르겠으나 아래의 stackoverflow 에 나와있다.

 

참고

stackoverflow.com/questions/64197752/bad-state-insecure-http-is-not-allowed-by-platform

 

1. request.args.get('name') 으로 구하기

 

python flask 코드

# app.py

from flask import Flask, request

app = Flask(__name__)

@app.route('/get')
def get():
    arg = request.args.get('data')
    arg2 = request.args.get('data2')
    print(arg,arg2)
    return arg + arg2

app.run(host='0.0.0.0', debug=True, port="1234")

http://localhost:1234/get?data=Hello&data2=World 

 

 

2. URL 에 변수 추가하기

 

# app.py

from flask import Flask, request

app = Flask(__name__)

@app.route('/get/<arg>/<arg2>')
def get(arg,arg2):
    print(arg,arg2)
    return arg + arg2

app.run(host='0.0.0.0', debug=True, port="1234")

 

http://localhost:1234/get/Hello/World

 

편한 방법으로 사용하자.

 

Reference : https://flask.palletsprojects.com/en/1.1.x/quickstart/

python3 버전 기준으로 작성하였습니다.

 

ipstack api 를 사용하여 사용자의 경도, 위도등을 얻어와보자.

 

1. https://ipstack.com/ 접속

 

메인

 

2. 우측상당 pricing 클릭 

 

무료사용은 1달에 10,000 번의 requests 가 가능하다.

Get free api key 를 눌러 회원가입하자.

 

3. 회원 가입이 완료되었다면 우측상당의 Dashboard 를 클릭한다.

api key

 

자신의 api key 를 볼 수있다. 이제 파이썬으로..

 

4. 코드 작성

import requests
import json

key = 'your api key'
send_url = 'http://api.ipstack.com/check?access_key=' + key
r = requests.get(send_url)
j = json.loads(r.text)
print(j)

# 경도
lon = j['longitude']

# 위도
lat = j['latitude']
print(lon,lat)
{'ip': 'my ip', 'type': 'ipv4', 'continent_code': 'AS', 'continent_name': 'Asia', 'country_code': 'KR', 'country_name': 'South Korea', 'region_code': '26', 'region_name': 'Busan', 'city': 'Busan', 'zip': '-', 'latitude': '위도', 'longitude': '경도', 'location': {'geoname_id': 1838524, 'capital': 'Seoul', 'languages': [{'code': 'ko', 'name': 
'Korean', 'native': '한국어'}], 'country_flag': 'http://assets.ipstack.com/flags/kr.svg', 'country_flag_emoji': '🇰🇷', 'country_flag_emoji_unicode': 'U+1F1F0 U+1F1F7', 'calling_code': '82', 
'is_eu': False}}

 

자신의 ip 와 경도 위도를 얻어올 수 있다.

 

자세한 documentation 은 홈페이지를 참고하자.

https://ipstack.com/documentation

 

API Documentation - ipstack

The ipstack API also offers the ability to request data for multiple IPv4 or IPv6 addresses at the same time. In order to process IP addresses in bulk, simply append multiple comma-separated IP addresses to the API's base URL. JSON: The API response for bu

ipstack.com

 

평소에 jQuery 로 get, post 를 쓰다가 javascript 만 사용해서 get은 어떻게 사용하는지 궁금해서 찾아봤다.

// jQuery

$.get("/sampleURL", function(response){
	console.log(response);
})

jquery 였다면 이렇게 간단하게 구현가능한데..

 

// Javascript

var xmlhttp = new XMLHttpRequest();

xmlhttp.onreadystatechange = function(){ // request 했을 때
    if(xmlhttp.readyState == XMLHttpRequest.DONE){ // request 가 완료 됐을 때
        if(xmlhttp.status == 200){ // 성공
            data = JSON.parse(xmlhttp.responseText);
            console.log(data); 
        }
        else{ // 실패
            console.log("Error : " + xmlhttp.status);
        }
    }
}

xmlhttp.open("GET", "/sampleURL"); // request 방식과 URL 지정
xmlhttp.send(); // request 한다

 

post 도 비슷하겠지만 자세히는 다음에 찾아봐야겠다.

+ Recent posts