e招募提示ping 请求超时时咋回事

iOS判断网络请求超时 - CSDN博客
iOS判断网络请求超时
+ (AFHTTPRequestOperation *)requestOperationWithUrl:(NSString *)url
&& & & & & & & & & & & & & & & & & & & requetMethod:(NSString *)method
& & & & & & & & & & & & & & & & & & & & & paramData:(NSDictionary *)aParamData
& & & & & & & & & & & & & constructingBodyWithBlock:(void (^)(id &AFMultipartFormData&
formData))block
& & & & & & & & & & & & & & & & & & & & & & success:(successBlock)success
& & & & & & & & & & & & & & & & & & & & & & failure:(failureBlock)failure {
& & AFHTTPRequestSerializer *requestSerializer = [AFJSONRequestSerializer
serializer];
& & NSMutableURLRequest *
& & if (block) {
& & & & method = @&POST&;
& & & & request = [requestSerializer multipartFormRequestWithMethod:method
URLString:url parameters:aParamData
constructingBodyWithBlock:block
error:nil];
& & }else{
& & & & request = [requestSerializer requestWithMethod:method
URLString:url parameters:aParamData
error:nil];
& & AFHTTPRequestOperation *op = [[AFHTTPRequestOperation
alloc] initWithRequest:request];
& & AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer
serializer];
& & responseSerializer.removesKeysWithNullValues =
& & responseSerializer.acceptableContentTypes = [NSSet
setWithObject:@&text/html&];
& & op.responseSerializer = responseS
& & __weak
AFHTTPRequestOperation *weakOp =
& & [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation,
id responseObject) {
& & & & if ([responseObject[@&code&]
integerValue] == 0) {
& & & & & & if (success) {
//& & & & & & & & success(weakOp, aParamData, responseObject[@&list&]);
& & & & & & & & success(weakOp, aParamData, responseObject);
& & & & & & }
& & & & }else{
& & & & & & NSLog(@&operation error msg = [%@]&, responseObject[@&description&]);
& & & & & & if (failure) {
& & & & & & & & failure(weakOp, aParamData, [self
errorWithRet:responseObject]);
& & & & & & }
& & } failure:^(AFHTTPRequestOperation *operation,
NSError *error) {
& & & & NSLog(@&operation failed = [%@] error = [%@]&, operation, error);
& & & & if (failure) {
& & & & & & failure(weakOp, aParamData, error);
& & return
打印 error
Error Domain=NSURLErrorDomain Code=-1001 &请求超时。&
UserInfo={
NSErrorFailingURLStringKey=,
_kCFStreamErrorCodeKey=-2102, NSErrorFailingURLKey=,
NSLocalizedDescription=请求超时。, _kCFStreamErrorDomainKey=4,&
NSUnderlyingError=0x167da8e0 {
Error Domain=kCFErrorDomainCFNetwork Code=-1001 &请求超时。&&
UserInfo={
_kCFStreamErrorCodeKey=-2102,&
NSErrorFailingURLStringKey=,&
NSErrorFailingURLKey=,
&NSLocalizedDescription=请求超时。,&
_kCFStreamErrorDomainKey=4
po&error.localizedDescription &请求超时。
po error.code &-1001
po error.userInfo
& & NSErrorFailingURLKey = &http://123.56.109.92/refitcar/service.s?sn=&;
& & NSErrorFailingURLStringKey = &http://123.56.109.92/refitcar/service.s?sn=&;
& & NSLocalizedDescription = &\U8bf7\U6c42\U8d85\U65f6\U3002&;
& & NSUnderlyingError = &Error Domain=kCFErrorDomainCFNetwork Code=-1001 \&\U8bf7\U6c42\U8d85\U65f6\U3002\& UserInfo={_kCFStreamErrorCodeKey=-2102, NSErrorFailingURLStringKey=http://123.56.109.92/refitcar/service.s?sn=, NSErrorFailingURLKey=http://123.56.109.92/refitcar/service.s?sn=,
NSLocalizedDescription=\U8bf7\U6c42\U8d85\U65f6\U3002, _kCFStreamErrorDomainKey=4}&;
& & &_kCFStreamErrorCodeKey& = &-2102&;
& & &_kCFStreamErrorDomainKey& = 4;
所以使用&error.code是否等于 &&-1001 &判断请求超时
本文已收录于以下专栏:
相关文章推荐
po response.expectedContentLength(这个的输出length感觉比较坑爹。)
$6 = -1 [no Objective-C description a...
一、请求超时
连接错误返回的Error: Error Domain=NSURLErrorDomain Code=-1001 "请求超时。" UserInfo={NSUnderlyingError=0...
ErrorError Domain=NSURLErrorDomain Code=-1012 "(null)" UserInfo={NSErrorFailingURLKey=https...
当用户按home键退出到后台时,对于安全性要求较高的App,我们通常会对它进行页面超时处理,按正常处理方式,可能会这样写:
在AppDelegate.m中:
- (void)applicationD...
AFNetworking3.0的简单使用及代码
使用AFN设置请求超时
//设置超时时间
[manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
error info:Transport closed with CloseStatus[code=1001, reason=null] in WebSocketClientSockJsSession...
Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLKey=http://XXXX, NSLo...
苹果更新系统后,最近打包的ipa包在ios9系统上无法安装(ios8可以),
提示“无法下载应用”,经过一系列折腾解决了问题:
参考 /b...
他的最新文章
讲师:钟钦成
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)零基础写python爬虫之HTTP异常处理
投稿:hebedich
字体:[ ] 类型:转载 时间:
我们在使用爬虫来抓取网页内容的时候,HTTP异常是必须要注意的一项,所以本文,我们来详细探寻一下HTTP异常处理的相关内容,通过一些具体的实例来分析一下,非常的简单,但是却很实用。
先来说一说HTTP的异常处理问题。
当urlopen不能够处理一个response时,产生urlError。
不过通常的Python APIs异常如ValueError,TypeError等也会同时产生。
HTTPError是urlError的子类,通常在特定HTTP URLs中产生。
1.URLError
通常,URLError在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生。
这种情况下,异常同样会带有"reason"属性,它是一个tuple(可以理解为不可变的数组),
包含了一个错误号和一个错误信息。
我们建一个urllib2_test06.py来感受一下异常的处理:
import urllib2&
req = urllib2.Request('')&
try: urllib2.urlopen(req)&
except urllib2.URLError, e:&&&
&&& print e.reason&
按下F5,可以看到打印出来的内容是:
[Errno 11001] getaddrinfo failed
也就是说,错误号是11001,内容是getaddrinfo failed
2.HTTPError
服务器上每一个HTTP 应答对象response包含一个数字"状态码"。
有时状态码指出服务器无法完成请求。默认的处理器会为你处理一部分这种应答。
例如:假如response是一个"重定向",需要客户端从别的地址获取文档,urllib2将为你处理。
其他不能处理的,urlopen会产生一个HTTPError。
典型的错误包含"404"(页面无法找到),"403"(请求禁止),和"401"(带验证请求)。
HTTP状态码表示HTTP协议所返回的响应的状态。
比如客户端向服务器发送请求,如果成功地获得请求的资源,则返回的状态码为200,表示响应成功。
如果请求的资源不存在, 则通常返回404错误。
HTTP状态码通常分为5种类型,分别以1~5五个数字开头,由3位整数组成:
------------------------------------------------------------------------------------------------
200:请求成功&&&&& 处理方式:获得响应的内容,进行处理
201:请求完成,结果是创建了新资源。新创建资源的URI可在响应的实体中得到&&& 处理方式:爬虫中不会遇到
202:请求被接受,但处理尚未完成&&& 处理方式:阻塞等待
204:服务器端已经实现了请求,但是没有返回新的信 息。如果客户是用户代理,则无须为此更新自身的文档视图。&&& 处理方式:丢弃
300:该状态码不被HTTP/1.0的应用程序直接使用, 只是作为3XX类型回应的默认解释。存在多个可用的被请求资源。&&& 处理方式:若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃
301:请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源&&& 处理方式:重定向到分配的URL
302:请求到的资源在一个不同的URL处临时保存&&&& 处理方式:重定向到临时的URL
304 请求的资源未更新&&&& 处理方式:丢弃
400 非法请求&&&& 处理方式:丢弃
401 未授权&&&& 处理方式:丢弃
403 禁止&&&& 处理方式:丢弃
404 没有找到&&&& 处理方式:丢弃
5XX 回应代码以“5”开头的状态码表示服务器端发现自己出现错误,不能继续执行请求&&& 处理方式:丢弃
------------------------------------------------------------------------------------------------
HTTPError实例产生后会有一个整型'code'属性,是服务器发送的相关错误号。
Error Codes错误码
因为默认的处理器处理了重定向(300以外号码),并且100-299范围的号码指示成功,所以你只能看到400-599的错误号码。
BaseHTTPServer.BaseHTTPRequestHandler.response是一个很有用的应答号码字典,显示了HTTP协议使用的所有的应答号。
当一个错误号产生后,服务器返回一个HTTP错误号,和一个错误页面。
你可以使用HTTPError实例作为页面返回的应答对象response。
这表示和错误属性一样,它同样包含了read,geturl,和info方法。
我们建一个urllib2_test07.py来感受一下:
import urllib2&
req = urllib2.Request('http://www.jb51.net/callmewhy')&
&&& urllib2.urlopen(req)&
except urllib2.URLError, e:&
&&& print e.code&
&&& #print e.read()&
按下F5可以看见输出了404的错误码,也就说没有找到这个页面。
3.Wrapping
所以如果你想为HTTPError或URLError做准备,将有两个基本的办法。推荐使用第二种。
我们建一个urllib2_test08.py来示范一下第一种异常处理的方案:
from urllib2 import Request, urlopen, URLError, HTTPError&
req = Request('http://www.jb51.net/callmewhy')&
&&& response = urlopen(req)&
except HTTPError, e:&
&&& print 'The server couldn\'t fulfill the request.'&
&&& print 'Error code: ', e.code&
except URLError, e:&
&&& print 'We failed to reach a server.'&
&&& print 'Reason: ', e.reason&
&&& print 'No exception was raised.'&
&&& # everything is fine&
和其他语言相似,try之后捕获异常并且将其内容打印出来。
这里要注意的一点,except HTTPError 必须在第一个,否则except URLError将同样接受到HTTPError 。
因为HTTPError是URLError的子类,如果URLError在前面它会捕捉到所有的URLError(包括HTTPError )。
我们建一个urllib2_test09.py来示范一下第二种异常处理的方案:
from urllib2 import Request, urlopen, URLError, HTTPError&
req = Request('http://www.jb51.net/callmewhy')&
&&& response = urlopen(req)&&&
except URLError, e:&&&
&&& if hasattr(e, 'code'):&&&
&&&&&&& print 'The server couldn\'t fulfill the request.'&&&
&&&&&&& print 'Error code: ', e.code&&&
&&& elif hasattr(e, 'reason'):&&&
&&&&&&& print 'We failed to reach a server.'&&&
&&&&&&& print 'Reason: ', e.reason&&&
&&& print 'No exception was raised.'&&&
&&& # everything is fine&&&
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具如果以上内容未能解决您的问题,欢迎您到发帖探讨或寻求帮助。
对系统的环境配置、安装、功能进行逐步的说明
常用设置、修改、数据库操作说明等
系统安装使用中常见的错误原因分析及解决
网站做好后如何优化并提高排名?本教程将帮助你快速入门
联系电话:1
QQ:(授权) (定制)
Email:service#pageadmin.net
地址:广东省中山市南头金湾广场B座16号

我要回帖

更多关于 请求超时怎么解决 的文章

 

随机推荐