我使用jQuery发送以下请求
var url = 'http://site.local/api/package/create';
var data = {
"command": "package",
"commandParameters": {
"options": [
{
"a": true
}
],
"parameters": {
"node_id": 1111,
"node_name": "Node Name"
}
}
}
$.ajax({
url: url,
type: "POST",
data: JSON.stringify(data),
contentType: "application/json",
success: function (a, b, c) {
// Do something with response
}
});
使用Postman(Chrome插件)进行类似的操作
POST
Content-Type: application/json
Payload:
{
"command": "package",
"commandParameters": {
"options": [
{
"a": true
}
],
"parameters": {
"node_id": 1111,
"node_name": "Node Name"
}
}
}
我打算将原始JSON字符串发送到我的服务器,而不是让Jquery将其转换为发布数据。 如何在Codeception中执行相同操作,我只是无法在文档中看到它,我只看到以下内容..
$I->sendAjaxPostRequest('/updateSettings', array('notifications' => true));
所以我想我想在Codeception中发出POST请求,同时在请求正文中附加JSON?
答案 0 :(得分:9)
codeception / src / Codeception / Module / REST.php 中的 encodeApplicationJson 函数检查标题“Content-Type”和值“application / json”是否存在。
如果设置了它,则返回json_encode($ parameters),这是我想要的字符串,所以我最终做了这样的事情...
$I->haveHttpHeader('Content-Type', 'application/json');
$I->sendPOST('api/package/create', [
'command' => 'package',
'commandParameters' => [
'options' => [],
'arguments' => []
]
]);
$I->canSeeResponseCodeIs(200);
$I->seeResponseIsJson();
有关发送邮件与 sendajaxpostrequest 之间差异的一些信息
http://phptest.club/t/what-is-the-difference-between-sendpost-and-sendajaxpostrequest/212#post_2
答案 1 :(得分:2)
我认为您应该告诉jQuery
不要处理您传递的数据。
试试这个
$.ajax({
url: url,
type: "POST",
processData: false,
data: JSON.stringify(data),
contentType: "application/json",
success: function (a, b, c) {
// Do something with response
}
});
在php端,您可以使用以下代码获取原始数据
$rawdata = file_get_contents('php://input');