我需要测试一些我编写的客户端应用程序代码,以测试它对来自Web服务器的HTTP响应中返回的各种状态代码的处理.
我安装了Fiddler 2(Web调试代理),我相信有一种方法可以使用这个应用程序修改响应,但我很难找到方法.这将是最方便的方式,因为它允许我保持客户端和服务器代码不被修改.
任何人都可以协助,因为我想拦截从服务器发送到客户端的HTTP响应并在到达客户端之前修改状态代码?
任何建议将不胜感激.
我有两台机器,A和B.
A向B发送HTTP请求并请求某个文档.B响应并发送所请求的文档并发出200 OK消息,但是机器A抱怨由于网络故障而未收到文档.
HTTP代码200是否也可以作为收到文档的确认?
我一整天都在努力在我的ASP.NET MVC 2应用程序中实现错误处理.我看过各种各样的技术,但都没有正常工作.我正在使用MVC2和.NET 4.0(在MVC3发布之前启动项目;我们将在发布初始版本后进行升级).
在这一点上,我将很乐意正确处理404和500错误 - 403(需要授权)也会很好,其次是各种其他特定的响应.现在,我得到所有404,全部500,全部302在404之前,或者全部302在500之前.
这是我的要求(应该非常接近HTTP的基本要求):
如果找不到资源,则抛出404,并显示包含所请求URL的特定于404的页面.不要返回像302这样的中间响应代码.理想情况下,保留请求的URL,而不是显示新的URL /Error/NotFound,但如果显示后者,请确保我们没有返回重定向响应来获取它.
如果发生内部服务器错误,则抛出500,并显示500特定错误,并指出出现了什么问题.同样,不要返回中间响应代码,理想情况下不要更改URL.
这是我认为的404:
/Content/non-existent-dir/non-existent-file.txt/non-existent-controller/Foo/666/Home/non-existent-action/666/Home/Login/non-existent-id这是我认为的500:
POST /User/New/new-user-name-too-long-for-db-column-constraint其中一些问题需要由特定的控制器或模型识别,然后控制器应抛出适当的HttpException.其余的应该更一般地处理.
对于404情况#2,如果找不到控制器,我尝试使用自定义ControllerFactory来抛出404.对于404#3案例,我试图使用自定义基本控制器来覆盖HandleUnknownAction并抛出404.
在这两种情况下,我在404之前得到302.而且,我从来没有得到500个错误; 如果我修改Web.config以在我的Web服务端点中输入拼写错误,我仍然得到302,然后404表示无法找到使用 Web服务的URL(控制器/操作).我还将请求的URL作为(不需要的)查询字符串参数获取:/Error/NotFound?aspxerrorpath=/Home/non-existent-action
这两种技术都来自http://www.niksmit.com/wp/?p=17(如何使用ASP.Net MVC获取正常的404(找不到页面)错误页面),来自http:// richarddingwall .名称/ 2008/08/17 /为基础的战略,为资源-404-错误-在-ASPNET-MVC /
如果在我的Web.config中<customErrors mode="On" defaultRedirect="~/Error/Unknown" redirectMode="ResponseRedirect" />,我得到了相应的响应代码,但我的错误控制器永远不会被调用.取出redirectMode属性可以获得MVC错误视图,但是介入302和更改的URL - 并且始终是相同的控制器(Unknown= 500;如果我将其更改为NotFound一切看起来像404).
以下是我已阅读并尝试实施的其他一些内容:
..以及一堆StackOverflow帖子.
在我看来,这种错误处理对于Web应用程序来说是非常基本的,并且MVC框架应该具有开箱即用的默认设置,并且让人们将其扩展为其他工作.也许他们会在将来的版本中做到这一点.在此期间,有人可以向我提供有关如何实施正确HTTP响应的全面详细信息吗?
我正在点击偶尔会抛出HTTP 403错误的API,响应机构可以以json的形式提供一些额外的信息,但是对于我的生活,我似乎无法从Alamofire中获取信息响应对象.如果我通过chrome访问API,我会在开发人员工具中看到这些信息.这是我的代码:
Alamofire.request(mutableURLRequest).validate().responseJSON() {
(response) in
switch response.result {
case .Success(let data):
if let jsonResult = data as? NSDictionary {
completion(jsonResult, error: nil)
} else if let jsonArray = data as? NSArray {
let jsonResult = ["array" : jsonArray]
completion(jsonResult, error: nil)
}
case .Failure(let error):
//error tells me 403
//response.result.data can't be cast to NSDictionary or NSArray like
//the successful cases, how do I get the response body?
}
Run Code Online (Sandbox Code Playgroud)
我几乎查询了附加到响应的每个对象,但是在HTTP错误的情况下它似乎没有给我回复响应主体.有没有解决方法或我在这里缺少的东西?
我正在使用以下代码来流式传输一个MemoryStream对象中的pptx,但是当我打开它时,我在PowerPoint中获得了修复消息,将MemoryStream写入响应对象的正确方法是什么?
HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.AppendHeader("Content-Type", "application/vnd.openxmlformats-officedocument.presentationml.presentation");
response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0}.pptx;", getLegalFileName(CurrentPresentation.Presentation_NM)));
response.BinaryWrite(masterPresentation.ToArray());
response.End();
Run Code Online (Sandbox Code Playgroud) 我是PHP的新手,我刚刚练习PHP setcookie()并且失败了.
http:// localhost/test/index.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
$value = 'something from somewhere';
setcookie("TestCookie", $value);
?>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
http:// localhost/test/view.php
<?php
// I plan to view the cookie value via view.php
echo $_COOKIE["TestCookie"];
?>
Run Code Online (Sandbox Code Playgroud)
但我没能运行index.php,这样的IE警告.
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\test\index.php:9) in C:\xampp\htdocs\test\index.php on line 12
Run Code Online (Sandbox Code Playgroud)
毫无疑问,我启用了IE 6 cookie.
上面的程序有什么问题吗?谢谢.
使用WinXP OS和XAMPP 1.7.3.
请考虑以下代码向客户端发送HTTP 201"创建"响应:
String url = "/app/things?id=42"; // example
response.setStatus(HttpServletResponse.SC_CREATED);
response.setContentType("text/plain");
response.setHeader("Location", url);
response.getWriter().print(url);
Run Code Online (Sandbox Code Playgroud)
它通知客户端创建了一个新的"东西",并且可以在URL上找到它/app/things?id=42.问题是这个URL是相对的.这对于JSP来说是完美的,可以写成如下:
<img src="<c:url value="/things?id=42" />" />
Run Code Online (Sandbox Code Playgroud)
哪个会产生以下HTML:
<img src="/app/things?id=42" />
Run Code Online (Sandbox Code Playgroud)
这是我们想要的网络应用程序.
但我不相信这是我们想要的201响应位置标题.HTTP规范声明:
14.30位置
Location response-header字段用于将收件人重定向到Request-URI以外的位置,以完成请求或标识新资源.对于201(已创建)响应,Location是请求创建的新资源的位置.对于3xx响应,位置应该应该指示服务器自动重定向到资源的首选URI.字段值由单个绝对URI组成.
Run Code Online (Sandbox Code Playgroud)Location = "Location" ":" absoluteURI一个例子是:
Run Code Online (Sandbox Code Playgroud)Location: http://www.w3.org/pub/WWW/People.html
我的问题是如何以适当的方式将servlet的相对URL转换为Location头的绝对URL.
我不相信使用:
request.getServerName() + ":" + request.getServerPort() + url;
Run Code Online (Sandbox Code Playgroud)
是正确的解决方案.应该有一个生成正确输出的标准方法(以便可以应用URL重写等).我不想创建一个hack.
当我们使用jQuery触发ajax请求时,我们如何访问响应头?我根据某些网站提供的建议尝试使用以下代码.但是xhr对象将变为空.我xhr在这种情况下看到了一个对象.但它没有访问响应头的方法.
function SampleMethod(){
var savedThis=this;
this.invokeProcedure=function(procedurePath){
$.ajax({
type: "GET",
url: procedurePath,
dataType: "json",
success: function(data,status,xhr){savedThis.resultSetHandler(data,status,xhr);}
});
}
this.resultSetHandler=function(data,status,xhrObj){
//Handle the result
}
this.errorHandler=function(args){
//Handle the result
}
}
var sampleObj=new SampleMethod();
sampleObj.invokeProcedure('url');
Run Code Online (Sandbox Code Playgroud) XlsxWriter对象保存为http响应以在Django中创建下载?
我创建了一个简单的HTTP服务器,允许用户下载文件.但这似乎不适用于mp3文件.目前的内容类型是"application/misc".为了使它与mp3文件一起使用,我试过了"application/mp3","application/data"并且"application/mpeg".
什么是正确的MP3或音频文件下载内容类型,我错过了一些其他标题?
编辑:文件应自动开始下载,而不是提示用户将其保存在某处.
httpresponse ×10
http ×5
http-headers ×2
alamofire ×1
asp.net ×1
asp.net-mvc ×1
c# ×1
cookies ×1
django ×1
excel ×1
fiddler ×1
ios ×1
java ×1
jquery ×1
mp3 ×1
php ×1
python ×1
servlets ×1
swift ×1
xlsxwriter ×1