You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP CURL调用OpenAI:移除POST数据中数值引号的问题

问题说明

通过PHP的$_POST获取temperature、max_tokens、top_p等参数后,这些值默认是字符串类型,直接放入$postData再用json_encode()转换时,会被加上引号,不符合OpenAI接口要求的数值格式。

原获取参数代码:

$getOpenAITemperature = $_POST[OpenAITemperature]; 
$getmaxtokens = $_POST[OpenAIMaximumLength]; 
$getTopp = $_POST[OpenAITopP];

导致json_encode()后输出:

{
  "model": "...",
  "prompt": "...",
  "temperature": "0.24",
  "max_tokens": "250",
  "top_p": "1"
}

而接口需要的格式是:

{
  "model": "...",
  "prompt": "...",
  "temperature": 0.24,
  "max_tokens": 250,
  "top_p": 1
}
解决方案

直接对$_POST获取的值进行类型强制转换,将字符串转为对应的数值类型即可:

方法1:强制类型转换

// 转换为浮点数(适用于temperature、top_p这类可能带小数的参数)
$getOpenAITemperature = (float)$_POST['OpenAITemperature']; 
// 转换为整数(适用于max_tokens这类整数参数)
$getmaxtokens = (int)$_POST['OpenAIMaximumLength']; 
$getTopp = (float)$_POST['OpenAITopP'];

方法2:使用filter_var做安全转换(推荐)

如果需要对输入值做合法性校验,比如确保是有效的数字,用filter_var更安全:

$getOpenAITemperature = filter_var($_POST['OpenAITemperature'], FILTER_VALIDATE_FLOAT);
$getmaxtokens = filter_var($_POST['OpenAIMaximumLength'], FILTER_VALIDATE_INT);
$getTopp = filter_var($_POST['OpenAITopP'], FILTER_VALIDATE_FLOAT);

注:如果输入值不是有效的数字,filter_var会返回false,可以额外添加判断处理异常情况。

修改后的完整示例代码

// 转换参数类型
$getOpenAITemperature = (float)$_POST['OpenAITemperature']; 
$getmaxtokens = (int)$_POST['OpenAIMaximumLength']; 
$getTopp = (float)$_POST['OpenAITopP'];

$OPENAI_API_KEY = "sk-123";
$getOpenAIModel = "text-davinci-003";
$getRequest = "My Question";
$ch = curl_init();
$headers  = [
      'Accept: application/json',
      'Content-Type: application/json',
      'Authorization: Bearer '.$OPENAI_API_KEY.''
  ];
$postData = [
  'model' => $getOpenAIModel,
  'prompt' => $getRequest,
  'temperature' => $getOpenAITemperature,
  'max_tokens' => $getmaxtokens,
  'top_p' => $getTopp,
  'best_of' => 2,
  'frequency_penalty' => 0.0,
  'presence_penalty' => 0.0,
  'stop' => '["\n"]',
];

curl_setopt($ch, CURLOPT_URL, 'https://api.openai.com/v1/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData)); 

$result = curl_exec($ch);

这样处理后,json_encode()会将数值类型的参数输出为不带引号的格式,符合OpenAI接口要求。

内容的提问来源于stack exchange,提问作者HotsyncUK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:45:46