无法使用Postman将POST变量发送到本地主机上的php脚本
我正在用iOS/Swift开发web应用程序的客户端,现在我正在测试与服务器通信的部分。我在localhost上设置了一个基本网站:无法使用Postman将POST变量发送到本地主机上的php脚本,php,http,post,postman,Php,Http,Post,Postman,我正在用iOS/Swift开发web应用程序的客户端,现在我正在测试与服务器通信的部分。我在localhost上设置了一个基本网站: http://localhost/~username/ConnectivityTest/login (对应于Mac文件系统上的/Users/username/Sites/ConnectivityTest/login) 服务器端脚本(index.php,在上面的目录中)是: Alternativley,作为表单数据,它是: userId my-user-na
http://localhost/~username/ConnectivityTest/login
(对应于Mac文件系统上的/Users/username/Sites/ConnectivityTest/login
)
服务器端脚本(index.php
,在上面的目录中)是:
Alternativley,作为表单数据
,它是:
userId my-user-name [Text]
password 12345 [Text]
userId my-user-name
password 12345
作为x-www-form-urlencoded
,它是:
userId my-user-name [Text]
password 12345 [Text]
userId my-user-name
password 12345
我尝试的每件事都会给出我在代码的错误路径中设置的响应“Error:empty post variables”
(即,$\u post['userId']
或$\u post['password']
为空)
相反,如果我将变量作为URL参数传递:
http://localhost/~username/ConnectivityTest/login/index.php?userId=my-user-name&password=12345
…并在脚本中以&_GET['userId']
和$\u GET['password']
的形式访问它们,效果很好
我错过了什么
更新:我在与php文件相同的目录中创建了一个HTML文件:
<html>
<body>
<form action="index.php" method="post">
User name: <input type="text" name="userId"><br>
Password: <input type="text" name="password"><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
用户名:
密码:
如果我在浏览器中加载上述页面,填写字段并提交表单,php脚本上的$\u POST
变量将获得正确的值。所以php代码是正确的,我在Postman中设置的请求是错误的(仍然不知道为什么)
更新2:为了防止本地主机出现问题,我将脚本移动到我控制的共享wb主机服务,但结果是一样的
更新3:我以前一定是错过了,但我有一个设置正在运行:
标题:内容类型应用程序/x-www-form-urlencoded
正文(“原始”):userId=my用户名和密码=123456
但是,这将我限制为键/值的平面列表;如果我希望向服务器发送更多结构化(即嵌套)数据,我需要JSON支持…在四处搜索后,我发现只有当您将其作为表单发送时,post body数据才会进入
$\u post
变量,即应用程序/x-www-form-urlencoded
-(我想这是$\u POST
的意思,而不是请求所使用的方法)。如果我说的不正确,请纠正我
当使用内容类型为application/json
时,下面的代码会起作用:
$data = json_decode(file_get_contents('php://input'), true);
$userId = $data["userId"];
$password = $data["password"];
我想这是非常基本的东西,但是我对HTTP的了解非常有限…我在第一次使用Postman时犯了一个错误,在使用POST方法时设置了参数,这可能会失败。我尝试了你的更新3,它起到了作用,然后我意识到Body选项卡中有键值对 删除参数,将主体设置为“x-www-form-urlencoded”,并添加要在此处发布的变量,这些都可以正常工作 我的疏忽是,我认为应该有一个单独的部分来输入值,该方法将决定如何传递这些值,如果您希望在发布时在URL中发送一些参数,这是有意义的
FirstOne的评论救了我。我在URL中添加了一个正斜杠,解决了这个问题。这样,我的php脚本就可以在不将标题设置为的情况下将请求检测为POST 内容类型应用程序/x-www-form- URL编码 我还测试了没有标题的代码,它运行良好。我也测试了内容类型:application/json,它运行良好 如果($_服务器['REQUEST_方法]='POST'){echo'请求是POST';} 我的脚本在Chrome上使用RESTEasy-Rest客户端返回了“Request is post”。
谢谢你,FirstOne。在网上阅读,似乎
application/x-www-form-urlencoded
用于基本的、简单的key=value列表,而application/json
用于更复杂的/嵌套的数据,如数组/字典等。因此,也许我应该将我的请求格式统一到json
(为了支持更复杂的API,而不仅仅是登录)对我来说,在POSTMAN上使用localhost/something
不起作用,但在最后添加/
之后,php开始从POST和php://input
。我必须使用localhost/something/
来让它工作。我也有同样的问题,我需要对php脚本进行这些更改吗?我不认识你r设置,但这是为我工作的php代码