Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
Http 在Play 2.2 Scala中操纵响应状态文本_Http_Playframework 2.2 - Fatal编程技术网

Http 在Play 2.2 Scala中操纵响应状态文本

Http 在Play 2.2 Scala中操纵响应状态文本,http,playframework-2.2,Http,Playframework 2.2,有人知道如何操作Scala Play 2.2中的HTTP状态文本吗? 我发现很容易指定状态代码,但不能指定附带的文本 我感兴趣的原因是,我正试图模拟一个我需要使用的web服务,它将特定信息放在状态文本中 例如,当登录尝试失败时,我将从此服务获取以下代码段(curl输出): 以下是我想在我虚构的天真世界里做的事情: Unauthorized(views.html.invalidlogon(message)).withHeaders( CONTENT_TYPE -> "text/plain

有人知道如何操作Scala Play 2.2中的HTTP状态文本吗? 我发现很容易指定状态代码,但不能指定附带的文本

我感兴趣的原因是,我正试图模拟一个我需要使用的web服务,它将特定信息放在状态文本中

例如,当登录尝试失败时,我将从此服务获取以下代码段(curl输出):

以下是我想在我虚构的天真世界里做的事情:

Unauthorized(views.html.invalidlogon(message)).withHeaders(
  CONTENT_TYPE -> "text/plain"
).setStatusText(message)
谢谢你的帮助

编辑-其他信息

所以事实证明我真正想要的是一个原因短语

根据报告,他们说:

< HTTP/1.1 401 Unauthorized
< ...
def createNettyResponse(header: ResponseHeader, closeConnection: Boolean, httpVersion: HttpVersion) = {
  val nettyResponse = new DefaultHttpResponse(httpVersion, HttpResponseStatus.valueOf(header.status))
...
这里列出的原因短语只是建议——它们可以被本地等价物替换,而不会影响协议

特别令人感兴趣的是对现有错误代码使用MAY


但是,如果在播放中我返回自定义4XX错误,则原因短语仅为4XX状态分类后的客户端错误。最好能控制原因短语,以便它与自定义响应状态代码一起使用。

事实上的响应状态是一个数字值,因此它是硬编码的

如果您确实需要,最好添加自定义标题,即:

Unauthorized("You can't login now, sorry...").withHeaders(
  CONTENT_TYPE -> "text/plain; charset=utf-8",
  "X-Error-Message" -> "Login or password invalid"
)

提示:出于安全原因,在登录过程中要小心过于描述性的错误消息。

查看播放代码后,我认为目前不可能这样做

如果您查看,他们会执行以下操作:

< HTTP/1.1 401 Unauthorized
< ...
def createNettyResponse(header: ResponseHeader, closeConnection: Boolean, httpVersion: HttpVersion) = {
  val nettyResponse = new DefaultHttpResponse(httpVersion, HttpResponseStatus.valueOf(header.status))
...
调用httpresponsetus.valueOf(header.status)不允许添加原因短语

在一个纯粹虚构的(可能是可疑的)世界中,以下变化可能允许这种情况:

def createNettyResponse(header: ResponseHeader, closeConnection: Boolean, httpVersion: HttpVersion) = {
  val nettyResponse = header.reasonPhrase match {
    case Some(reasonPhrase) => new DefaultHttpResponse(httpVersion, HttpResponseStatus(header.status, header.reasonPhrase))
    case _ => new DefaultHttpResponse(httpVersion, HttpResponseStatus.valueOf(header.status))
  }
  ...
然而,这样的变化会产生巨大的涟漪效应

所以如果我是对的,这是不可能的,我会看看大家怎么想


谢谢你的回复。事实上,我查看了规范,似乎我要寻找的是原因短语。一些图书馆称之为状态文本,正如我所发现的,这是一个用词不当的词。不幸的是,我试图模拟一个现有的服务,所以额外的头(虽然合理)不是一个选项。