2017-12-01 7 views
-1

문제 :json 데이터를 컬 (curl) 요청으로 파일과 함께 보내면 어떻게 Flask로 처리 할 수 ​​있습니까?

내가 플라스크에 -d와 JSON 데이터와 -F 옵션과 함께 파일을 보낼

는 하나 내가 구현할 수 route.But.

코드 시도했습니다.

컬 -X POST -H "콘텐츠 형식 : 응용 프로그램/JSON"-d '{ "이름": "XYZ", "비밀번호": "XYZ"}'http://192.168.150.113/test

플라스크 코드 :

@app.route('/test',methods = ['GET', 'POST']) 
def test(): 
if request.method == 'POST': 
    data = request.data 
data = json.loads(data) 
return 'success' 

전용 파일로 : 나는이 두 PO를 결합하려는

curl -X POST -F [email protected] http://192.168.150.113/test 
@app.route('/process' , methods = ['GET', 'POST']) 
def process(): 
if request.method == 'POST': 
    f = request.files['file'] 
if f: 
    try: 
filename = secure_filename(f.filename) 
f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 
return 'success' 

그러나 별도의 요청을 전송하지 않고 ST 요청 및 플라스크를 사용하여 처리 ..

내가 이것을 할 수있는 방법이 있습니까?

답변

1

는 서로 다른 Content-Type이 같이 함께 JSON으로 파일을 보낼 수 없습니다 multipart/form-data

curl -X POST -H "Content-Type: multipart/form-data" -F "[email protected]" -F "username=xyz" -F "password=xyz" http://localhost:5000/test 
1

데이터를 전송하기 위해 -F 옵션을 사용합니다. 또는 json을 문자열로 변환하고 multipart/form-data으로 보낼 수 있습니다. 예를 들어, 다음과 같은 form을 보낼 수 있습니다

curl -X POST -H "Content-Type: multipart/form-data" -F "[email protected]" -F "json_data='{\"username\":\"xyz\",\"password\":\"xyz\"}'" http://localhost:5000/test 

그리고 파이썬에서

, 당신은 request.form.get("json_data")하여 JSON을 얻을 수 있습니다. 훨씬 복잡한 구조를 지원하므로 키 - 값 쌍을 일반 multipart/form-data에 전달하는 것보다 훨씬 튼튼합니다.