개발 Q&A

제목 python으로 JSON을 php로 post하는 과정에서 질문입니다.
글쓴이 브레인토스트 작성시각 2016/06/17 19:47:18
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 14172   RSS

구글링해서 나오는 좋은 코드들을 써도 해결이 안되서 여기에 또 .. 질문을 드립니다.

 

일단 제가 보내려는 json 구조는 이렇게 생겼습니다.

 

"student":{

"instructor":1,

"email":"abc@gmail.com",

"name":"아무개",

"phone":"01000000000",

"student":5

}

 

이 형태로 postman으로 패킷을 보내게 되면 정상적으로 결과 값이 잘 나옵니다.

그런데 python 코드만 사용하면 php 코드에서 전송된 데이터를 읽지를 못하는건지 받지를 못하는건지 모르겠습니다.

못받는 것 같긴합니다만. 파이썬 코드는 이렇습니다.

 

import httplib, urllib

params={"student":{"email":'abc@abc.com',"name":"아무개","instructor":1,"phone":"01000000000","student":5}}
params=urllib.urlencode(params)
headers={"Content-type":"application/x-www-form-urlencoded","Accept": "text/plain"}

import urllib2
request=urllib2.Request('local test address',params)
response = urllib2.urlopen(request)

data=response.read()
print data

 

이런 코드인데요. 웃긴거는 다른 php 파일에 {"id":1,"index":1} 이런 단순한 json은 잘받아서 결과가 나옵니다;;

왜 이러는지 정말 미치겠네요 ㅠ python으로 급하게 작성해야해서 갑갑합니다. 도움 좀 부탁드리겠습니다.

물론 같은 json형태로 postman에서 php 파일로 전송하면 모든 로직이 정상처리됩니다.

 다음글 view에서 객체 배열을 어떻게 사용하는지;; (4)
 이전글 왕초보가 고수분들께 질문올립니다.. (6)

댓글

kaido / 2016/06/17 23:48:45 / 추천 1

python 으로 json 을 보내보지는 않았지만...

예측하는 대로 라면

urlencode 부분이 문제 아닐까요?

 

저도 암호 관련으로 파라메터 전체를 urlencode 하고 다시 decodeing 하는 과정에서 미스가 발생 하더군요.

한번 체크해보세요.

브레인토스트 / 2016/06/19 16:17:26 / 추천 0
말씀하신대로 urlencode와 그 전을 echo로 찍어보니 상당히 형태가 다르더라구요. 그래서 눈으로 봤을 때 더 json 데이터에 가까워 보이는 urlencode를 지우고 바로 post를 해보니 프로그램 자체가 오류가 납니다 ..
한대승(불의회상) / 2016/06/20 08:43:10 / 추천 1
php로 받았을때 json_decode 하기전의 문자열이 어떤 형태인지 부터 확인 해 보세요.
알브레드 / 2016/06/21 09:56:21 / 추천 0

json 코드는 이런식으로 겉에 중괄호를 싸야 하지 않나요?

{"student":{

"instructor":1,

"email":"abc@gmail.com",

"name":"아무개",

"phone":"01000000000",

"student":5

} }

 

----------------------------------

아래 코드를 테스트 해보세요.

 

$a = '{"student":{

"instructor":1,

"email":"abc@gmail.com",

"name":"아무개",

"phone":"01000000000",

"student":5

} }';

$b = '"student":{

"instructor":1,

"email":"abc@gmail.com",

"name":"아무개",

"phone":"01000000000",

"student":5

}';

var_dump(json_decode($a));
var_dump(json_decode($b));

 

브레인토스트 / 2016/06/21 22:37:56 / 추천 0

직장 동료분에게 물어보니 python할때 자기도 저 앞에 student도 python구조에 해당하는 줄 알았는데

post key값을 student로 하고 나머지 데이터를 키의 값으로 보내줘야 한다더군요.

그래서 저런식으로 urlencode시키니 제대로 동작했습니다.

브레인토스트 / 2016/06/22 15:00:59 / 추천 0

    json_data = json.dumps(params)
    params = {'student':json_data}

이렇게 만들어서 urlencode하고 전송했습니다.