如何在没有表单的POST请求中发送url参数

Posted

技术标签:

【中文标题】如何在没有表单的POST请求中发送url参数【英文标题】:how to send url parameter in POST request without form 【发布时间】:2012-06-02 03:24:02 【问题描述】:

我必须在 url 中传递一个参数。我无法像往常一样将它发送到 GET 请求中,变量和值随请求一起显示在地址栏中。因此,最终用户可以更改此变量值的值并发送将被处理的请求。

href="url=/admin/usermanagement/?flag=2

我想发送这个隐藏flag=2

现在这是一个 GET 请求,它可以在地址栏中看到。如果您对将其更改为 POST 以隐藏和发送值有任何想法,请提出您的建议。

【问题讨论】:

转向 POST 请求只会增加一些模糊性,不会阻止用户更改值和发出请求。 嗯,是的,我知道他们仍然可以使用 firebug 查看它。但是,在我的情况下,这个安全级别就足够了。无论如何,如果您对此案有任何好的建议,我欢迎。感谢您的评论。 【参考方案1】:

您可以使用 AJAX 完全摆脱表单。

只需将其添加到您的 javascript

function postTo(url, query) 
    var request = (XMLHttpRequest?new XMLHttpRequest():new ActiveXObject());
    request.open('POST', url, true);
    request.send(query);

然后用这样的方式调用:

postTo('/admin/usermanagement/','flag=2');

请注意,这将不会重新加载页面。如果您想重新加载页面,请使用 Borges 的回答。

【讨论】:

CSRF 验证呢?我收到验证错误。 @GobSmack 有一个答案 here 使用 JQuery。【参考方案2】:

您仍然可以使用 html 表单,但对用户“隐藏”它:

<!DOCTYPE html>
<html>
    <body>
        <form id="myform" method="post" action="/">
            % csrf_token %
            <input type="hidden" name="flag" value="2" />
            <a href="#" onclick="document.forms[0].submit();return false;">Let's go!</a>
        </form>
    </body>
</html>

还有观点:

def index(request):
    if request.method == 'POST':
        try:
            flag = request.POST['flag']
            # TODO use flag
        except KeyError:
            print 'Where is my flag?'

    return render_to_response('index.html', ,
        context_instance=RequestContext(request))

【讨论】:

这对我来说非常有效,正是我所需要的! @Maximas 如果它回答了您的问题,您应该通过单击答案左侧的复选标记来接受答案。 @sort-of-a-beginner 这不是我的帖子吗? @Maximas 对不起,我以为你在回答 Borges 的问题,因此我认为这是你的问题。下次我得仔细看看。

以上是关于如何在没有表单的POST请求中发送url参数的主要内容,如果未能解决你的问题,请参考以下文章

web中的请求:get  与 post

关于 GETPOST表单Content-Type

get和post的区别

Spring Boot - 如何通过带有查询参数的 url 发送 POST 请求并将响应存储在方法中?

get&post的区别

Yii2如何将表单请求发送到外部url