Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.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
Html Post请求包括';内容类型';和JSON_Html_Http_Post - Fatal编程技术网

Html Post请求包括';内容类型';和JSON

Html Post请求包括';内容类型';和JSON,html,http,post,Html,Http,Post,我将与goo.gl合作进行URL缩短。我需要提出以下要求: POST https://www.googleapis.com/urlshortener/v1/url Content-Type: application/json {"longUrl": "http://www.google.com/"} 我的html:- <form method="post" action="https://www.googleapis.com/urlshortener/v1/"> <b

我将与goo.gl合作进行URL缩短。我需要提出以下要求:

POST https://www.googleapis.com/urlshortener/v1/url
Content-Type: application/json
{"longUrl": "http://www.google.com/"}
我的html:-

<form method="post" action="https://www.googleapis.com/urlshortener/v1/">
    <button type="submit"> submit </button>
</form>

提交

如何在此处添加“内容类型”和json

浏览器不支持JSON作为表单提交的媒体类型(支持的类型为)

从网页发出此类请求的唯一方法是使用XMLHttpRequest对象


Google提供(包装了XMLHttpRequest)可以与用户交互。

使用Ajax请求可以让生活更轻松

    $.ajax({
          url: 'https://www.googleapis.com/urlshortener/v1/url',
          type: 'POST',
          data: JSON.stringify({
            longUrl: $scope.url
          }),
          contentType: 'application/json',
          success: function(got) {
            return alert("shortened url: " + got.id);
          }
    });

上述方法非常有效。

HTML表单不支持JSON,您必须使用AJAX发送JSON

但是,如果您只是想测试应用程序的安全性,看看它是否容易受到CSRF攻击,那么有一种黑客可以将JSON数据作为纯文本发送,如本文所述:

HTML表单的优点是不需要启用JavaScript,并且不像AJAX XMLHttpRequest那样具有相同的源策略保护,因此HTML表单可以将数据发送到任何第三方域。 事实上,看起来也可以使用XMLHttpRequest向第三方域发送GET和POST请求(您将只收到一条警告,说明您无法读取响应),即使CORS不允许,只要您不将内容类型头更改为“application/json”:

以下是文章中的一个示例:

<body onload='document.forms[0].submit()'>
  <form method='POST' enctype='text/plain'>
    <input name='{"secret": 1337, "trash": "' value='"}'>
  </form>
</body>

但是,如果尝试将enctype表单参数设置为“application/json”而不是“text/plain”,则无法识别该参数,并将导致默认的“application/x-www-form-urlencoded”内容类型HTTP头

一些应用程序将检查内容类型HTTP头是否为“application/json”,因此它将防止CSRF攻击(除非您安装了Flash Player:)。更好的安全性是使用真实性令牌,这将保护HTTP请求,即使数据类型不是JSON。否则,也可以在会话ID cookie上使用sameSite属性来防止CSRF()。

JSON POST请求可能通过Javascript从浏览器发出
  • 大多数浏览器(从2020年起应该支持Fetch API)允许您使用JSON发出POST请求。-当然,您必须使用javascript来实现这一点

您可以通过ajax提交表单并在其中添加内容类型。@Ghost为什么需要使用ajax?@Prateek默认内容类型为“application/x-www-form-urlencoded”,现在要更改该类型,表单的“enctype”属性应该更改。由于发送JSON数据也需要一个问题,所以我建议使用ajax请求,这在这里也是合适的。我不知道在没有ajax的情况下如何发送JSON数据。这个答案对我帮助很大。最终创建了一个javascript库来实现这一点:@keithhackbarth我更新了我的答案,我认为HTML表单hack to send JSON只有在您希望在不启用javascript的情况下发送数据时才有用(因此,库在没有javascript的情况下无法工作)。否则可以直接使用XMLHttpRequest。