无法使用Postman

时间:2015-08-24 02:31:16

标签: php http post postman

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

http://localhost/~username/ConnectivityTest/login

(对应于Mac文件系统中的/Users/username/Sites/ConnectivityTest/login)。

上面目录中的服务器端脚本(index.php)是:

<?PHP
    $userId   = $_POST["userId"];
    $password = $_POST["password"];

    if (empty($userId) || empty($password)){

        echo "Error: empty post variables";
    }
    else{
        // Process credentials...

我在iOS上使用NSURLSession API,但我注意到无论我如何配置请求,即使连接成功(即返回http代码200和响应正文作为数据),服务器端的POST变量不可用(空)。

所以我决定尝试在浏览器上使用Postman手动发送请求(试图排除我的iOS / Swift代码上的任何错误),但我不知道应该如何配置它(我不熟悉HTTP,这一切对我来说仍然有点混乱):

  1. 我应该将Content-Type标题设置为application/jsonapplication/x-www-form-urlencoded还是什么?

  2. 我应该将正文数据发送为form-datax-www-form-urlencoded还是raw

  3. 在Postman中,我按如下方式设置身体数据(原始):

    {
        "userId":"my-user-name",
        "password":"123456"
    }
    

    Alternativley,form-data,它是:

    userId     my-user-name      [Text]
    password   12345             [Text]
    

    作为x-www-form-urlencoded,它是:

    userId     my-user-name      
    password   12345        
    

    我尝试的所有内容都为我提供了我在代码的错误路径中设置的响应"Error: empty post variables"(即$_POST['userId']$_POST['password']为空)。

    相反,如果我将变量作为URL参数传递:

    http://localhost/~username/ConnectivityTest/login/index.php?userId=my-user-name&password=12345
    

    ...并在脚本中以&_GET['userId']$_GET['password']访问它们,它运行正常。

    我错过了什么?

    UPDATE:我在与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脚本上的$_POST变量将获得正确的值。所以php代码是正确的,我在Postman中设置我的请求错误(仍然不知道为什么)。

    更新2:为了防止localhost出现问题,我将脚本移动到我控制的共享wb托管服务,但结果是一样的。

    更新3:我以前一定以前都错过了,但是有一个设置让我开始工作:

    标题:Content-Type application/x-www-form-urlencoded

    正文(“原始”):userId=my-user-name&password=123456

    然而,这限制了我对密钥/值的平面列表;如果我希望向服务器发送更多结构化(即嵌套)数据,我需要JSON支持......

2 个答案:

答案 0 :(得分:12)

我第一次使用Postman时犯的错误是在使用失败的POST方法时设置了参数。我尝试了你的Update 3,然后我意识到Body选项卡中有关键值对。

删除params,将Body设置为&#34; x-www-form-urlencoded&#34;并添加要在此处发布的变量按预期工作。

我的疏忽是我认为将会有一个部分输入值,并且该方法将决定如何传递它们,如果您想要使用POST在URL中发送一些参数

Postman Chrome Extension - Post Body

答案 1 :(得分:1)

@FirstOne 的评论救了我。我在URL中添加了正斜杠,它解决了问题。这样,即使没有设置标题

,我的php脚本也可以将请求检测为POST

内容类型应用程序/ x-www-form- urlencoded的

我还测试了没有标题的代码,它运行正常。我测试了Content-type:application / json,它运行正常。

if($ _ SERVER ['REQUEST_METHOD] ='POST'){echo'Request is post'; }

我的脚本使用RESTEasy - Chrome上的Rest客户端返回了“请求发布”。 谢谢,FirstOne。