我从一个网站上感兴趣的信息来自于Ajax调用的Json形式。但是,当我拨打电话时,它有时会返回204 - 没有内容 - Http响应代码,根本不给我任何数据。
从客户端来看,是否有办法强制服务器始终返回内容,例如设置标题,还是通过其他方式?
我使用的是Scala Play WS API。例如,
WS.url(url).withQueryParameters(queryParameters)
.withHeaders("User-Agent" -> "Mozilla/5.0 (X11; Linux x86_64)...",
"X-Requested-With" -> "XMLHttpRequest",
"Cookie" -> "cookie1=1; cookie2=2;...")
.get()
更新:Ajax有效负载
AJAX CAPTURE Chrome扩展程序数据:
$.get(url).done (showResult).fail(showError);
{
"frameId": 0,
"method": "GET",
"parentFrameId": -1,
"requestId": "122389",
"tabId": 2432,
"timeStamp": 1444493900946.029,
"type": "xmlhttprequest",
"url": url
}
感谢。
答案 0 :(得分:1)
它有时会返回204 - 没有内容
最好提供您要求的服务器的信息。
可能有很多原因导致您无法获得请求的内容。
目标服务器上的安全服务发现/怀疑您是一个不好的请求者(僵尸程序,可疑的IP等),而不是禁止和返回代码400
它不返回任何代码{{ 1}}。
服务器对您的请求进行一些特殊检查,并导致您错过了一些参数(GET参数,POST有效负载,cookie等)。
如果您想在目标服务器上修复它 - 请转向网站所有者。
考虑以下来自 AJAX CAPTURE Chrome扩展的镜头:
正如您所看到的,整个请求有效负载由表单数据 1。和一些服务信息组成,总计构成有效负载对象 - 2。 因此, 2。包含 1。,正如您在镜头中看到的那样。因此,对于目标服务器,您需要浏览/调查浏览器生成的实际ajax请求并模拟类似的请求。
注意:
204
显然是stackoverflow内部请求计数器,因此它不易制作/生成/模拟。 requestId
显然是stackoverflow计时值(加上smth。其他),因此找到一个形成它们的算法可能会很棘手。随着时间的推移进行一些试验以找出算法。