用 Postman 发送 POST 参数不起作用,但发送 GET 参数可以

Posted

技术标签:

【中文标题】用 Postman 发送 POST 参数不起作用,但发送 GET 参数可以【英文标题】:Sending POST parameters with Postman doesn't work, but sending GET parameters does 【发布时间】:2014-08-01 20:31:19 【问题描述】:

我正在尝试使用 Chrome 扩展 Postman 测试一个简单的 php 页面。当我发送 URL 参数时,脚本可以正常工作(例如,变量在 $_REQUEST 参数中可用)。当我将它们作为x-www-form-urlencoded 参数发送时,$_REQUEST 参数只包含PHPSESSID

脚本:

<?php
var_export($_REQUEST);
?>

当我发送 URL 参数时,$_REQUEST 包括它们:

但是当我将它们作为 POST 变量发送时,$_REQUEST 不包括它们:

我错过了什么?

【问题讨论】:

您找到这个问题的答案了吗?我也有同样的问题。 不,我还没有。这很可能与我们的 API 路由有关,可能只发送了一些参数而不是全部?我不确定。 感谢您的回复-不幸的是,我刚刚放弃了它...:/ 有同样的问题:( 我找到了这个答案:***.com/a/28461500/704803。我从 HTTP 重定向到 HTTPS,导致 POST 变量丢失。当我告诉 Postman 直接访问 HTTPS 网址时,它起作用了 【参考方案1】:

当您通过x-www-form-urlencoded 发送参数时,您需要将请求的标头设置为使用Content-Type 作为application/x-www-form-urlencoded

【讨论】:

对我来说是选择 Body 选项卡并选择 x-www-form-urlencoded 并在该选择下方找到放置 POST 键/值数据的键/值条目。顺便说一句,我的 Postman 版本是 4.10.4【参考方案2】:

检查标题中的内容类型。我在将原始 JSON 和我的内容类型作为 POSTMAN 标头中的 application/json 发送时遇到问题。

我的 php 在请求帖子中看到了 jack all。直到我将内容类型更改为 application/x-www-form-urlencoded 使用 RAW 文本区域中的 JSON 及其类型为 JSON,我的 PHP 应用程序是否开始看到发布数据。不是我在处理原始 json 时所期望的,但它现在可以满足我的需要。

【讨论】:

是的,将正文类型更改为 x-www-form-urlencoded 为我修复了它【参考方案3】:

我遇到了同样的问题。为了修复它,我添加了以下标题:

Content-Type: application/json

即使我在原始帖子字段参数中也有“json”类型,我也必须手动添加内容类型。

【讨论】:

【参考方案4】:

我将 Postman 中的 url 设置为 http://,但 Apache 正在重定向到 https://,并且不知何故 POST 变量被丢弃了。

我将其更改为https:// 后,POST 变量工作正常。

另请参阅:https://***.com/a/28461500/704803

【讨论】:

这也是我遇到的问题。 nginx 通过 302 重定向到 https,并且 POST 参数被丢弃在重定向中。手动将 URL 设置为 https:// 有效。 我认为这是 Postman 中的 bug。为 HTTPS 工作而不为 HTTP 工作。我已经看到它们的功能生成的代码Generate Code 为 Python 请求生成了错误的代码。 querystring = "username":"data1","mydata":"9232" payload = "" headers = 'cache-control': "no-cache", 'postman-token': "aeb70e40-c12a-f713 -1d8d-596b8cf976af" response = requests.request("POST", url, data=payload, headers=headers, params=querystring) print(response.text) 我认为这是错误的。 我遇到了同样的错误,但这个理论不适用。它对两者都不起作用。 谢谢。这个节省了我的时间。【参考方案5】:

我在 PostMan 和 Advance REST Client 中都遇到了同样的问题。通过fiddler查看,发现我的请求payload没有转换成JSON格式。

我将 Body 中的数据作为 x-www-form-urlencoded 传递

您可以通过在请求标头中使用 Content-Type 作为 application/x-www-form-urlencoded 来修复它。

【讨论】:

非常感谢@Arvind,将标题更改为application/x-www-form-urlencoded 确实有效!恕我直言,这应该被接受为答案:) 也许有人面临同样的问题:对我来说,在 POSTMAN 上使用 localhost/something 不起作用,但在最后添加 / 后,php 开始从 POST 和来自php://input。我必须使用localhost/something/ 才能使其工作。 是的!这解决了这个问题。实际上,URL 附近的 PARAMS 字段设置了 GET 数据而不是 POST 数据。并且关键字PARAMS 始终与GET 相关,而DATAPOST 相关以传递数据。我认为 PostMan 的窥视者应该修复此问题以自动更改,或自动添加 DATA 按钮。 @FirstOne 你应该作为答案。我也遇到了同样的问题 @FirstOne - 之所以有效,是因为在末尾添加 / 可以避免重定向。 POSTMAN 在重定向时丢失 POST 参数。【参考方案6】:

只需使用Body Tab 并在此处输入post parameters。请注意,如果选择了GetBody Tab 将被禁用。

【讨论】:

【参考方案7】:

对我来说,服务器期望 HTTPS 请求,但我没有在 URL 中指定。钩子会到达服务器,但主体是空的。

【讨论】:

【参考方案8】:

“邮递员”中有时会出现版本问题:

我也遇到了同样的问题。使用最旧版本的邮递员发送数据时。 那个时候我在服务器端收到了空的json数据。我已经解决了这个问题,一旦我卸载了最旧版本的邮递员并安装了最新版本。

【讨论】:

【参考方案9】:

对不起,如果这是线程死灵术,但这在今天仍然很重要,尤其是使用了多少 API!

我遇到的一个问题是:我不知道您需要在“Key”列下放置:“Content-Type”;我认为这是一个用户密钥,当它返回请求时,它不是。

这么简单的事情可能会对您有所帮助,我认为 Postman 可以更好地措辞该专栏,因为在使用 Fiddler 时我什至不必阅读文档;而我用 Postman 做的。

【讨论】:

【参考方案10】:

不要使用raw JSON body,而是尝试使用form-data

【讨论】:

【参考方案11】:

我也遇到了这个问题,我只是在 url 中添加 www,比如 -

https://www.your-domain.com/

【讨论】:

以上是关于用 Postman 发送 POST 参数不起作用,但发送 GET 参数可以的主要内容,如果未能解决你的问题,请参考以下文章

我的 post route 不起作用,postman 认为是 GET 请求

当使用 chrome POSTMAN 测试 http POST 时,它在 django 中不起作用

postman怎么发送post请求

请求 REST POST API 在 Postman 中工作,但在 Alamofire 中不起作用

postman post请求 header 和body怎么用

postman之get请求