今天在项目中发现一个ASIHttpRequest的Bug。这个Bug可能会导致你Http请求延时至少在timeout设置时间结束之后。更可怕的是,为了找出这个Bug,可能会浪费程序员更多的时间。为这个问题我至少奋斗了3个小时!
项目中一直在使用ASIHttpRequest,但有一次,我发现Http请求居然总是不成功。我下意识地以为这是网络延时问题,我延长了ASIHttpRequest的超时时间至30秒,于是程序不再报错。
但今天在使用同样的代码时,我发现以前我全错了。这不是超时的问题,而是ASIHttpRequest的一个Bug。
因为这次我请求本机的Tomcat服务器的某个jsp页面,页面代码写得很简单,在firefox中请求该页面的响应时间不会超过0.01秒,但在iPhone模拟器中居然用了20多秒才返回。这不可能是网络延时的原因。
当我把超时时间改小至10秒,等待超时时间结束,ASIHttpRequest甚至直接报kCFStreamEventErrorOccurred错误。
我打开ASIHttpRequest的所有调试日志,发现ASIHttpRequest似乎在尝试用上次的连接去连接服务器:
Request #3 will use connection #2
Request attempted to use connection #2, but it has been closed -will retry with a new connection
Request #3 will use connection #3
它好像连接时重用上次的http连接。这样肯定是不行的,因为上次的http请求结束后服务器已经把连接关闭了。
于是我们只能把ASIHttpRequest的连接重用关闭:
[requestsetShouldAttemptPersistentConnection:NO];
这样,前面的问题就不会出现了。其实,在不同的http会话中,不应该开启PersistentConnection。
相关推荐
- 初始化请求:创建一个ASIHTTPRequest对象,然后指定URL,例如`ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];` - 设置请求参数:可以使用`-[ASIHTTPRequest setPostValue:forKey:]`方法添加...
ASIHTTPRequest是一个Objective-C库,专为iOS和Mac OS X平台设计,用于简化HTTP请求的处理。这个库由Alex桑德森(Alex Sandy Phipps)创建,为开发者提供了丰富的功能,便于实现网络数据的获取、下载以及相关操作。...
本项目使用了ASIHTTPRequest库与UITableView相结合来实现这一功能。ASIHTTPRequest是一个广泛使用的HTTP请求库,它提供了简单易用的API,使得网络请求操作变得相对简单。而UITableView则是iOS中用于展示列表数据的...
在“asihttprequest带demo代码包”中,你将找到一个示例项目,它可以帮助你理解和使用 ASIHTTPRequest 库。 1. **请求发起**: - ASIHTTPRequest 支持 GET、POST、PUT、DELETE 等多种 HTTP 方法。 - 可以通过 `-...
9. **请求超时与重试机制**:可以设置请求的超时时间,并且在请求失败时自动重试,提高网络连接的可靠性。 虽然ASIHttpRequest在过去是很多iOS开发者的选择,但随着Apple推出官方的URLSession API(在iOS 7中引入)...
ASIHTTPRequest 是一个Objective-C编写的网络请求库,用于iOS和Mac OS X平台,它为开发者提供了简单易用的API来处理HTTP请求。这个库在早期的iOS开发中非常流行,因为它封装了网络请求的复杂性,使得开发者可以更加...
对于那些不希望迁移现有代码或者需要兼容旧版iOS系统的开发者来说,ASIHTTPRequest依然是一个可靠的选择。 然而,需要注意的是,ASIHTTPRequest的开发已经停止,最新的版本发布于2011年,这意味着它可能无法支持...
4. **接收数据**:ASIHTTPRequest接收到数据后,不是直接写入到最终的文件,而是写入到一个临时文件中。这样可以确保在下载过程中不会破坏已有的文件内容。 5. **合并文件**:当下载完成或暂停后,ASIHTTPRequest会...
ASIHTTPRequest 是一个Objective-C编写的网络请求库,广泛应用于iOS和Mac OS X开发中,它为开发者提供了简单易用的接口来发起HTTP请求。这个源码包包含了ASIHTTPRequest库的完整源代码,对于深入理解网络请求处理...
ASIHTTPRequest 是一个基于苹果的 CFNetwork 框架开发的开源网络库,它为 iOS 和 Mac OS X 平台提供了简单而强大的 HTTP 请求处理。这个库由 Ben Copsey 创建,旨在简化网络通信任务,尤其在处理异步请求、队列管理...
- GET请求:使用`+[ASIHTTPRequest requestWithURL:]`方法创建一个请求对象,然后通过`-[ASIHTTPRequest setShouldStartSynchronous:]`设置同步或异步执行。 - POST请求:可以使用`+[ASIHTTPRequest requestWith...
标题“asihttpRequest”表明我们关注的是这个特定的第三方库。 描述中的“一个更新过的第三方请求类库”意味着这个版本可能包含了最新的修复、优化或者功能增强,旨在提高性能和用户体验。它表达了开发者希望通过...
ASIHTTPRequest是iOS开发中早期广泛使用的一个网络请求库,由美国开发者Sam Soffes开发,它简化了HTTP请求的处理,使得在Objective-C项目中发送网络请求变得更加方便。虽然现在已被更现代的AFNetworking等库取代,但...
ASIHTTPRequest是iOS和macOS平台上的一个开源网络库,由Ben Gottlieb开发,用于处理HTTP请求。这个库在Objective-C编程中非常流行,尤其是在早期的iOS开发阶段,因为它的易用性和强大的功能。尽管Apple后来推出了...
2. 请求队列:ASIHTTPRequest 包含一个请求队列,允许开发者一次性安排多个请求,并控制它们的执行顺序和并发数量,避免过度消耗系统资源。 3. 文件上传与下载:该库支持大文件的上传和下载,可以暂停、恢复或取消...