使用PUT请求发送数据

12

我想用PUT请求发送数据。

我有一个用于发送数据的输入字段,希望通过提交来发送数据。

我的数据是JSON格式。

这只是一次渗透测试 - 因此必须是PUT请求。

以下是代码:

<header>
<meta charset="UTF-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<script type="javascript">

$(document).ready(function(){

$(#submit).click(){
    var xmlHttp = getNewHTTPObject(); //returns a XMLHttpRequest object
    function chargeURLPut(url) { 
        var mimeType = "text/plain";  
        xmlHttp.open('PUT', url, true);  // true : asynchrone false: synchrone
        xmlHttp.setRequestHeader('Content-Type', mimeType);  
        xmlHttp.send($(#data).val(); 
}}});

</script>
</header>
<body>
  <form>
    Data:<br>
    <input id="data" type="text" name="data" value="Mickey"><br>
    <input id="submit" type="submit" value="Submit">
 </form>
</body>
</html>

但数据会像GET参数一样添加到URL中,我想在HTTP头之后获得数据,例如"{date: foo....}"。

以下是请求示例:

PUT /foo/bar/v1/users HTTP/1.1
Host: www.foo.bar
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: */*
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: https://www.foo.bar/frontend/
Content-Type: application/json;charset=UTF-8
Authorization: eyJhbGciOiJSUzUxMiJ9.eyJzdW
origin: https://www.foo.bar
Content-Length: 598
Connection: close

{foo: bar, foo:bar}

1
好的,你尝试了什么?有什么问题吗? - Craicerjack
当你尝试运行JS时,你遇到了什么样的问题? - kevingreen
1
我感到惊讶的是JavaScript甚至能够在 type="javascript" 的情况下运行。 - Ultimater
1
发送操作缺少括号。xmlHttp.send($(#data).val(); 应该是 xmlHttp.send($(#data).val()); - kevingreen
2个回答

5
你需要将数据作为 x-www-form-urlencoded 发送。
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

你需要在 .click() 中调用定义的函数。

$(#submit).click(){
    var xmlHttp = getNewHTTPObject(); //returns a XMLHttpRequest object
    chargeURLPut('url');

    function chargeURLPut(url) { 
        var mimeType = "text/plain";  
        xmlHttp.open('PUT', url, true);  // true : asynchrone false: synchrone
        xmlHttp.setRequestHeader('Content-Type', mimeType);  
        xmlHttp.send($('#data').val()); 
    }
});

当调用 .click 时,默认会调用内部函数吗?它应该是一个匿名内部函数吗?还是直接调用函数?我可能对 JavaScript 生疏了。 - kevingreen
使用这个解决方案,Firefox 不会发送任何请求。 - spitzbuaamy
@spitzbuaamy,你遇到了什么样的错误?你可能会有跨站脚本问题吗? - kevingreen
1
最后一行也有错误,缺少 ' ' 和 )。应该是 xmlHttp.send($('#data').val()); 还要检查浏览器控制台的输出。 - Hiraqui

4

您可以尝试使用$.ajax调用。

<html>

<head>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

    <script type="text/javascript">
        $(document).ready(function() {
            $('#submit').click(  function () {
                console.log("click");
                var sendData = $('#data').val();

                $.ajax({
                    url: 'localhost',    //Your api url
                    type: 'PUT',   //type is any HTTP method
                    data: {
                        data: sendData
                    },      //Data as js object
                    success: function () {
                    }
                })
                ;

            });
        });
    </script>
</head>
<body>
<form>
    Data:<br>
    <input id="data" type="text" name="data" value="Mickey"><br>
    <input id="submit" type="button"  value="Submit">
</form>
</body>
</html>

我在一个Web服务器上测试了这个。它可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接