Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用Postman将POST变量发送到本地主机上的php脚本_Php_Http_Post_Postman - Fatal编程技术网

无法使用Postman将POST变量发送到本地主机上的php脚本

无法使用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

我正在用iOS/Swift开发web应用程序的客户端,现在我正在测试与服务器通信的部分。我在localhost上设置了一个基本网站:

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代码