最近在學習AFNetwork,非常好的網絡框架,能節省很多時間。不過請求網絡數據時報錯1016,3840.
這兩個錯誤網上解決方法很多,http://blog.csdn.net/huifeidexin_1/article/details/38844535,這篇博客的解決方法非常好。也確實起了效果,不過接下來問題來了。
比如我要實現最容易的登錄功能,用http協議,我把賬號密碼傳給服務器,如果驗證成功,它傳個1給我就行了。
+(BOOL)getLoginByUser:(NSString *)username andPass:(NSString *)passWord{ AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.requestSerializer = [AFHTTPRequestSerializer serializer]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; NSDictionary *dict = @{@"nickName":username,@"password":password}; [manager GET:url parameters:dict success:^(AFHTTPRequestOperation *operation, id responSEObject) { NSData *doubi = responseObject; NSString *shabi = [[NSString alloc]initWithData:doubi encoding:NSUTF8StringEncoding]; NSLog(@"%@",shabi); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; return YES;}
因為加了"text/html",所以傳過來的是一個html頁面,1在body里。即...<body>1</body>...
但是我只要1就行了,如果自己在寫算法把1提取出來就太詭異了,并不可行。
后來才發現是我一開始就理解有問題。上面的方法處理的就是服務器傳"text/html"的解決方法。用于爬蟲或者web直接顯示頁面等情況。
而我要的就是json數據
{"result": "1"}
這也正符合了AFNetwork默認支持的類型,其實ios開發不怎么用到"text/html"類型。大部分情況下是json,所以這也是AFNetwork默認支持的。
這又回到了剛開始的時候,報了1016錯誤。
其實錯誤是服務器的原因,服務器要指定格式,http response的content-type。它要設置為json,那么就不會報1016錯誤了。
+(BOOL)getLoginByUser:(NSString *)username andPass:(NSString *)password{ AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; NSDictionary *dict = @{@"nickName":username,@"password":password}; [manager GET:url parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) { NSString *responseValue = [responseObject objectForKey:@"result"]; NSLog(@"%@",responseValue); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; return YES;}
這個輸出結果就是1。
所以遇到了錯誤還是要多想想,即然自己要的就是json數據,干嘛還要add"text/html",應該要想到其實是服務端的問題。
新聞熱點
疑難解答