我正在使用以下结构构建API:
POST
/words
。{"word":"example"}
。此请求应在数据库中添加单词,如果我通过httpie
一切进行测试都可以。
$ http POST localhost:8000/words word="new word2"
HTTP/1.1 200 OK
Access-Control-Allow-Headers: application/json
Access-Control-Allow-Origin: http://localhost:8080
Connection: close
Content-Type: application/json
Host: localhost:8000
X-Powered-By: PHP/7.0.12-1+deb.sury.org~xenial+1
{
"test": {
"method": "POST",
"input": {
"word": "new word2"
},
"post": []
},
"words": {
"id": "581f2f118b0414307476f7b3",
"word": "new word2"
}
}
在test
我放置的变量中获得php
:
$method = $_SERVER['REQUEST_METHOD'];
$input = json_decode(file_get_contents('php://input'),true);
$post = $_POST;
我们可以看到那$_POST
是空的。如果我使用javascript:
$(form).submit(function(e) {
var url = "http://localhost:8000/words";
var data = {"word" : form.elements["word"].value };
$.ajax({
type: "POST",
url: url,
data: data,
dataType: 'json',
success: function(data)
{
console.log(JSON.stringify(data));
}
});
e.preventDefault();
});
我获得以下控制台日志:
{
"test":{
"method":"POST",
"input":null,
"post":{
"word":"word from form"
}
},
"words":{
"id":"581f34b28b0414307476f7b6",
"word":null
}
}
现在input
是空的。Word为空,因为我正在$input["word"]
从中处理php://input
。我的问题:
$_POST
还是检查两个变量?php://input
从浏览器发送,也$_POST
可以从命令行收费发送httpie
吗?您手动构造的示例和JavaScript示例并不相同。
在第一个中,您将发送具有application / json内容类型的JSON编码数据。
在第二步中,您将JavaScript对象传递给jQuery,并使其遵循默认行为,即使用application / x-www-form-urlencoded格式对其进行编码并将其用作内容类型(就像提交一个常规的HTML表单即可)。
PHP在POST请求中支持application / x-www-form-urlencoded数据,但不支持JSON。
我应该处理$ _POST还是同时检查两个变量?
如果您要发送应用程序/ x-www-form-urlencoded数据或PHP支持的其他格式,请使用$_POST
。否则,您需要从中获取原始数据php://input
并自己解析。
我可以从浏览器发送php:// input吗?
像httpie这样来自命令行收费的$ _POST?
请参阅httpie文档:
http --form POST api.example.org/person/1 name='John Smith'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句