<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                **1.訪問網絡的方式** **@同步請求:數據的請求在主線程來執行,一旦發送同步請求,程序將停止用戶交互,直至服務器返回數據完成,才可以進行下一步操作,而網絡數據加載需要一個時間過程,這樣的話就會堵塞主線程.** **@異步請求:數據的請求過程在多線程執行** **@其他區別:同步請求無法取消,異步請求過程中可以取消;同步請求無法監聽加載進度,異步可以監聽** **2.主要請求方式:** **@GET請求:將參數直接寫在訪問路徑上,操作簡單,但是容易被外界看到,安全性不高,而且有長度限制,地址最多255字節** **@POST請求:將參數放到body里面.POST請求操作相對復雜,需要將參數和地址分開,不過安全性高,參數放在body里面不容易被捕獲** **3.基本流程:** **@構造NSURL實例(將需要請求的數據的網址字符串轉化成NSURL對象)** @生成*NSURLRequest*請求(不可變,一般用*NSMutableURLRequest*) **@通過NSURLConnection發送請求** **@通過返回*NSURLResponse*實例和*NSError*實例分析結果** **@接受返回數據** **4.NSURL(**NSURL實例包裝了一個地址信息,可以是本地地址,也可以是遠程地址) ~~~ // 初始化URL實例 NSURL * url = [NSURL URLWithString:@"http://www.baidu.com:8080/search?id=1"]; // http NSLog(@"Scheme:%@",[url scheme]); // www.baidu.com NSLog(@"Host:%@",[url host]); // 端口8080 NSLog(@"Port:%@",[url port]); // http://www.baidu.com:8080/search?id=1 NSLog(@"absoluteString:%@",[url absoluteString]); // /search NSLog(@"relativePath:%@",[url relativePath]); // /search NSLog(@"Path:%@",[url path]); // ("/",search ) NSLog(@"pathComponents:%@",[url pathComponents]); // id=1 NSLog(@"Query:%@",[url query]); ~~~ **5.NSURLRequest和NSMutableURLRequest** ~~~ @NSURLRequest 包裝了網絡請求的信息 NSURL * url = [NSURL URLWithString:urlString]; // 設置后不能改變 NSURLRequest * request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; @NSMutableURLRequest @便利構造器方法(方便,其他參數另行設置) NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; // 請求方式默認是GET,可以不設置 [request setHTTPMethod:@"GET”]; @實例方法 NSMutableURLRequest * request = [[NSMutableURLRequest alloc]init]; // 設置超時時間 [request setTimeoutInterval:60.0]; // 設置請求參數(POST才有請求體,必設) [request setHTTPBody:_data]; // 參數cachePolicy NSURLRequest默認的cache policy是NSURLRequestUseProtocolCachePolicy, 是最能保持一致性的協議。 NSURLRequestReloadIgnoringCacheData 忽略緩存直接從原始地址下載 NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data時才從原始地址下載 NSURLRequestReturnCacheDataDontLoad 允許app確定是否要返回cache數據,如果使用這種協議當本地不存在response的時候,創建NSURLConnection or NSURLDownload實例時將會馬上返回nil;這類似于離線模式,沒有建立網絡連接; ~~~ **6.同步--->GET請求** ~~~ - (void)onClickBoysPostButton{ // 要求的地址 NSString * urlString = @"http://project.lanou3g.com/teacher/yihuiyun/phpXML.php?sex=男"; // 將地址編碼(把 sex=男 轉換成 sex=%E7%94%B7) NSString *str = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // 1.將網址字符串封裝為NSURL對象 NSURL * url = [NSURL URLWithString:str]; // 網絡請求設置 NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; // 請求方式默認是GET [request setHTTPMethod:@"GET"]; // 2.連接服務器 // Response對象,用來得到返回后的數據,比如,用statusCode==200 來判斷返回正常 NSHTTPURLResponse *response; NSError * error = nil; // 3. 返回數據 NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; // NSData轉化NSString 用的是實例方法 NSString * string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@",string); NSLog(@"%ld",[response statusCode]); [string release]; } ~~~ **7.同步--->POST請求** ~~~ - (void)onClickPostButton{ //@第一步,創建URL NSString * urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"; NSURL * url = [NSURL URLWithString:urlString]; //@第二步,創建請求 NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; // 設置請求方式POST,默認為GET [request setHTTPMethod:@"POST"]; // 設置參數 NSString * parameterString = @"date=20131129&startRecord=2&len=20&udid=1234567890&terminalType=Iphone&cid=213"; NSData * postData = [parameterString dataUsingEncoding:NSUTF8StringEncoding]; // 客戶端向服務器提交數據,都是NSData類型,放在請求體里面 [request setHTTPBody:postData]; //@第三步,連接服務器 NSURLResponse * response = nil; NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; // NSData轉化NSString 用的是實例方法 NSString * string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; } ~~~ **8.異步(代理方法,可以監測過程)--->POST請求(這里只展示POST請求,GET請求類似)** ~~~ - (void)onClickPostButton{ //@第一步,創建URL NSString * urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"; NSURL * url = [NSURL URLWithString:urlString]; //@第二步,創建請求 NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; // 設置請求方式POST,默認為GET [request setHTTPMethod:@"POST"]; // 設置參數 NSString * parameterString = @"date=20131129&startRecord=2&len=20&udid=1234567890&terminalType=Iphone&cid=213"; NSData * postData = [parameterString dataUsingEncoding:NSUTF8StringEncoding]; // 客戶端向服務器提交數據,都是NSData類型,放在請求體里面 [request setHTTPBody:postData]; //@第三步,連接服務器(異步,同步太坑爹) // 實現2個協議<NSURLConnectionDelegate,NSURLConnectionDataDelegate> [NSURLConnection connectionWithRequest:request delegate:self]; } // 服務器開始給客戶端回傳數據,這個方法只會執行一次 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ // 服務器開始回傳數據,客戶端需要創建一個空的,可變的Data對象,用于存儲每次獲取的數據片段 // @property (nonatomic,retain)NSMutableData * returnInfoData; self.returnInfoData = [[NSMutableData alloc]init]; NSHTTPURLResponse * httpResponse = (NSHTTPURLResponse *)response; // 狀態碼 NSLog(@"%ld",httpResponse.statusCode); // 響應報頭 NSLog(@"%@",httpResponse.allHeaderFields); NSLOG_FUNCTION; } // 客戶端持續接收數據,data是數據片段,整個數據分段返回,這個方法執行的次數取決于數據總長度[response expectedContentLength] - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ [_returnInfoData appendData:data]; NSLOG_FUNCTION; } // 數據完全下載成功,接收到完整數據 - (void)connectionDidFinishLoading:(NSURLConnection *)connection{ // _returnInfoData 是完整的數據了 [_returnInfoData release]; NSLOG_FUNCTION; } // 數據下載失敗 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ NSLog(@"didFailWithError"); NSLOG_FUNCTION; } ~~~ **9.異步(Blcok方法,不能監測過程)--->POST請求(這里只展示POST請求,GET請求類似)** ~~~ - (void)onClickAsyncBlockButton{ //@第一步,創建URL NSString * urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"; NSURL * url = [NSURL URLWithString:urlString]; //@第二步,創建請求 NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; // 設置請求方式POST,默認為GET [request setHTTPMethod:@"POST"]; // 設置參數 NSString * parameterString = @"date=20131129&startRecord=2&len=20&udid=1234567890&terminalType=Iphone&cid=213"; NSData * postData = [parameterString dataUsingEncoding:NSUTF8StringEncoding]; // 客戶端向服務器提交數據,都是NSData類型,放在請求體里面 [request setHTTPBody:postData]; //@第三步,連接服務器(異步,同步太坑爹) // sendAsynchronousRequest 異步接受數據 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { // 數據已經接收完成,進行設置 }]; } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看