0

0

如何使用 cURL 正确发送 JSON 数据到 PHP REST 接口

霞舞

霞舞

发布时间:2026-01-16 20:44:12

|

763人浏览过

|

来源于php中文网

原创

如何使用 cURL 正确发送 JSON 数据到 PHP REST 接口

本文详解如何通过 curlphp 后端(如 `rest_searchresult.php`)以 post 方式提交标准 json 格式请求,重点解决字段拼写错误、content-type 设置、请求体构造及 cookie 处理等常见陷阱。

在调用类似 https://pflegefinder.bkk-dachverband.de/aua/rest_searchresult.php 这类基于 JSON 的 REST 接口时,必须确保请求完全符合服务端预期的格式与语义。从原始代码可见,问题根源并非 cURL 配置本身,而是两个关键失误:

  1. 字段名拼写错误:"laguage" → 应为 "language"(原文中未显式写出但上下文暗示存在该错别字,且答案明确指出此为 SQL 报错主因);
  2. JSON 请求体构造不当:使用 urlencode(json_encode(...)) 并作为表单字段传入(array("searchdata"=>$data_string)),导致服务端收到的是 URL 编码后的字符串而非原始 JSON,且未正确嵌套 searchdata 对象结构。

✅ 正确做法是:直接将结构化 JSON 字符串作为 CURLOPT_POSTFIELDS 的值,并显式声明 Content-Type: application/json

以下为可直接运行的完整示例(已修复字段名、精简配置、增强健壮性):

Clips AI
Clips AI

自动将长视频或音频内容转换为社交媒体短片

下载
<?php
$data = [
    "searchdata" => [
        "required"     => 1,
        "statistics"   => 1,           // 注意:原答案中漏传了该字段,但接口文档要求存在
        "offer_name"   => null,
        "zip"          => 51143,
        "location"     => null,
        "maxdistance"  => 20,
        "target_group" => null,
        "age_group"    => null,
        "language"     => null,         // ✅ 拼写修正:language(非 laguage)
        "sort"         => "zip_asc",
        "record_offset"=> 0
    ]
];

$jsonPayload = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL            => "https://pflegefinder.bkk-dachverband.de/aua/rest_searchresult.php",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => $jsonPayload,
    CURLOPT_HTTPHEADER     => [
        'Content-Type: application/json; charset=utf-8',
        'Content-Length: ' . strlen($jsonPayload)
    ],
    CURLOPT_COOKIE         => "PHPSESSID=2a4tctjc0ec6potr1p5a0tonir", // 替换为有效会话 ID
    CURLOPT_TIMEOUT        => 15,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_SSL_VERIFYPEER => false, // 生产环境请设为 true 并配置 CA 证书
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error    = curl_error($ch);
curl_close($ch);

if ($error) {
    die("cURL Error: $error");
}

echo "HTTP Status: $httpCode\n";
echo "Response:\n$response\n";

? 关键注意事项

立即学习PHP免费学习笔记(深入)”;

  • 字段一致性:务必对照接口文档核对所有键名(如 language 易错拼为 laguage),一个字符错误即可触发后端 SQL 异常;
  • JSON 结构嵌套:服务端期望顶层为 { "searchdata": { ... } },不可扁平化或遗漏外层对象;
  • Cookie 管理:PHPSESSID 是会话标识,需从合法登录或前置请求中获取;若需自动维护会话,应启用 CURLOPT_COOKIEJAR + CURLOPT_COOKIEFILE;
  • 编码与长度头:添加 charset=utf-8 可避免中文乱码;手动设置 Content-Length 提升兼容性;
  • 安全性提醒:CURLOPT_SSL_VERIFYPEER => false 仅用于调试,生产环境必须启用 SSL 证书验证。

总结:发送 JSON 请求的核心在于——语义准确(字段名+结构)、格式规范(纯 JSON 字符串+正确 Header)、上下文完备(有效 Cookie/Referer)。跳过表单模拟,直击 JSON 本质,方能稳定对接现代 RESTful 接口。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1090

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

380

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2028

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

379

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1580

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

585

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

438

2024.04.29

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

4

2026.03.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号