【问题标题】:POST call doesn't work correctly?POST 调用无法正常工作?
【发布时间】:2026-02-10 19:10:01
【问题描述】:

我需要进行 POST 调用以将数据保存在服务器上。对于某些项目,服务器需要JSON-Encoded List。但是,当我进行 post call 并查看 $result 时,“JSON 编码列表”的数据未保存,项目为 null。然而 POST 调用是成功的。

$items = json_encode((array(
    "name" => $_GET['title'],
    "sub_type" => $subtype_fd,
    "calories" => intval($_GET['calories']),
    "carbohydrate" => floatval($_GET['carbohydrate']),
    "cholesterol" => floatval($_GET['cholesterol']),
    "fiber" => floatval($_GET['fiber']),
    "protein" => floatval($_GET['protein']),
    "saturated_fat" => floatval($_GET['saturated_fat']),
    "unsaturated_fat" => floatval($_GET['unsaturated_fat']),
    "sodium" => floatval($_GET['sodium']),
    "sugar" => floatval($_GET['sugar'])
)));

var_dump($items);

$data = array('note' => $_GET['title'], 'sub_type' => $subtype_bld, 'items' => $items);

$options = array(
    'http' => array(
        "header" => "Content-Type: application/x-www-form-urlencoded\r\nAuthorization: Bearer {$_COOKIE['access_token']}\r\n",
        'method' => 'POST',
        'content' => $data
    ),
);

$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);

来自 API 的信息

Host: jawbone.com 
Accept: application/json
Content-Type: multipart/form-data

【问题讨论】:

    标签: php html json rest post


    【解决方案1】:

    content 上下文选项应该是一个字符串,您提供的是一个数组。它应该是 URL 编码格式的字符串。 http_build_str 函数会将关联数组转换为这种格式。所以使用:

    'content' => http_build_str($data)
    

    【讨论】:

    • 现在我得到一个错误:(!)致命错误:调用未定义的函数 http_build_str()
    • 这是否意味着我必须添加新的 \http\QueryString();到php的顶部?