cURL发布JSON数组

时间:2013-08-15 13:44:37

标签: php json curl

您好我将JSON数组与cURL一起发布到我的API,

我在cURL帖子中有以下代码:

$data_string = stripslashes($JSONData);

$ch = curl_init('http://api.webadress.com');                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(  
    'Accept: application/json',                                                                                                                                                        
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($data_string))                                                                       
);                                                                                                                   

$result = curl_exec($ch);

它不会在API端存储/发布任何内容,并且$ results的返回结果不正确, 代码有什么问题?

来自JSON

的一点
{
"name": "test",
"type_id": "1",
"css": "#fb-iframe{}#fb-beforelike{}#fb-beforelike-blur{}",
"json": [
    {
        "Canvas": [
            {
                "Settings": {
                    "Page": {
                        "campaignName": "test"
                    }
                },
                "QuizModule": {
                    "Motivation": [],
                    "Questions": [],
                    "Submit_Fields": [
                        {
                            "label": "Name",
                            "name": "txtName",
                            "value": true
                        }
                    ]
                }
            }
        ]
    }
],
"user_id": "123"
}

2 个答案:

答案 0 :(得分:1)

您的$data_string可能不是field=value对格式,因此您的$_POST全局内无法解析任何内容。

由于您想阅读$_POST全局:

  1. 您不应该设置content-type
  2. 您的$data_string必须采用field=value对格式
  3. 以下是可行的(我完全省略了标题部分,你不应该设置content-type):

    $data_string = stripslashes($JSONData);
    $ch = curl_init('http://api.webadress.com');   
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, array('JSONData'=>$data_string));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch);
    

    另一方面,如果您想要在发送数据时访问数据,则不应尝试通过$_POST读取数据,而应在服务器端使用:

    $JSONData = file_get_contents("php://input");
    

答案 1 :(得分:0)

您需要http_build_query()