2015-01-14 3 views
0

다음 요청을 올바르게 처리 할 수있는 API가 django로 작성되었습니다. 내가 장고 측에 request.DATA를 인쇄 할 경우PHP curl이 JSON을 게시하기 전에 변경 중임

curl -H "Content-Type: application/json" -d '{"name":"a","description":"b","props": {"Notes":"c"}}' http://127.0.0.1:8000/en/api/asset/ -H 'Authorization: Token  114ada7e487b2cdbc9277d377e4d20640a606bb2' 

나는 다음과 같은 얻을 :

(Pdb) print request.DATA 
{u'props': {u'Notes': u'c'}, u'name': u'a', u'description': u'b'} 

나는 내가 원하는 PHP 코드의 다음 조각이 동일한 요청을하기 위해 사용해야 할

$data_string = json_encode($values['json_parameters']); 
error_log($data_string, 0); 
//curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json', 
    'Content-Length: ' . strlen($data_string)) 
); 
error_log("Method: ".$method, 0); 
if ($method == 'POST') { 
    curl_setopt($curl, CURLOPT_POST, 1); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string); 
} 

$ data_string에는 { "name": "a", "description": "b", "props": { "Notes": "c"}}가 포함됩니다.

이 쿼리 나는 다음과 같은 얻을 백엔드에 도달하는 경우 : 그것을 보내기 전에

(Pdb) print request.DATA 
<QueryDict: {u'{"name":"a","description":"b","props":{"Notes":"c"}}': [u'']}> 

는 PHP 내 JSON에 무엇을하고 있습니까? 위의 컬 요청에 따라 PHP를 사용하여 정확히 동일한 데이터를 게시하려면 어떻게해야합니까?

  • 내가 더 PHP 전문가는 아니지만 JSON
+1

아, 당신은 뭔가 다른 것을 묻고있었습니다. 이제는 쿼리 작성자를 밝히기 위해 서식을 수정했습니다. –

+1

나는 PHP *가 * 아무것도하지 않는다고 의심한다. 특히'$ data_string'이 정확하기 때문에. 더 좋은 질문은 당신이하고있는 것이 무엇입니까? PHP가 파이썬이 실제로 무엇을 보내고 있는지를 알기 위해 트래픽을 탐지 했습니까? –

+0

나는 PHP가 나의 원래 컬 스크립트가하고있는 것을하지 않는다는 것을 확신한다. 그리고 그것이 내가하고 싶은 것이다. 나는 데이터를 스니핑하지 않았다. curl, swidt, java, angular 및 python의 요청이 예상대로 작동합니다. – Michael

답변

0

중첩이없는 요청에 대해 작업을 수행하지만, 그건 문제가되지 않을 수 있습니다 : request.DATAQueryDict 경우, 당신은 단순히 얻을 arealdict = request.DATA.dict()을 사용할 수 있습니다 그 중 진짜 dict입니다. 반복되는 필드가 있으면 여러 값 중 하나만 선택되지만, 어쨌든 반복되는 필드가없는 것 같으므로 특정 사용 사례는 중요하지 않습니다.

+0

나는 그것을하고있다. 그러나 결과는 모든 키 값이 키 필드에있는 dict이다. 나는 서버 쪽을 바꿀 수 없다. 필자가 익숙한 다른 언어로 PHP를 바꿀 수도 있습니다. – Michael

0

나중에 로그인 코드에서 application/json 헤더를 덮어 쓰는 것으로 나타났습니다. 그래서 일부 요청이 제대로 작동하는 것처럼 보입니다.

Sinc eteh 콘텐츠 유형이 설정되지 않았으므로 Django는 요청을 형식화 된 요청으로 처리했습니다. DATA.

관련 문제