【发布时间】:2012-02-22 03:21:54
【问题描述】:
我正在尝试将 json 数据作为 cURL POST 的参数传递。但是,我坚持抓住它并将其保存在数据库中。
cURL 文件:
$data = array("name" => "Hagrid", "age" => "36");
$data_string = json_encode($data);
$url = 'http://localhost/project/test_curl';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json')
);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
$result = curl_exec($ch);
//based on http://www.lornajane.net/posts/2011/posting-json-data-with-php-curl
test_curl 文件:
$order_info = $_POST; // this seems to not returning anything
//SAVE TO DB... saving empty...
我错过了什么?呜呜……
【问题讨论】:
-
如教程链接中所述,您必须将内容长度参数添加为附加标头。我可以确保本教程完全有效(我在 2 天前为自己使用过)。如果这不起作用,则 curl 请求的设计目标可能没有预期的行为。
-
顺便说一下,CURLOPT_POSTFIELDS 需要一个关联数组来发布,比如 array('data' => $data_string) 否则它不会发布任何东西
-
@DieVarDump 这不是真的。它接受字符串或关联数组。如果你想使用
Content-Type: application/json它必须是一个字符串。最好自己创建字符串并传递它,因为如果传递数组,Content-Type将是multipart/form-data,请求正文可能比使用application/x-www-form-urlencoded时大得多。 -
@DaveRandom 是的,我的错误,我没有看到 HTTPHEADER...忘记我之前的评论。
-
@TRD 是的...我只是对处理 JSON 帖子感到困惑,只是在我的问题中提到了我的例子。只是说教程没有问题......我在掌握它时遇到了问题。 :) 谢谢老兄!