iOS_網路編程

來源:互聯網
上載者:User

標籤:

網路編程中有以下幾種方式向伺服器進行提交資料:IOS同步請求、非同步請求、GET請求、POST請求

1、同步請求可以從網際網路請求資料,一旦發送同步請求,程式將停止使用者互動,直至伺服器返回資料完成,才可以進行下一步操作,

2、非同步請求不會阻塞主線程,而會建立一個新的線程來操作,使用者發出非同步請求後,依然可以對UI進行操作,程式可以繼續運行

3、GET請求,將參數直接寫在訪問路徑上。操作簡單,不過容易被外界看到,安全性不高,地址最多255位元組;

4、POST請求,將參數放到body裡面。POST請求操作相對複雜,需要將參數和地址分開,不過安全性高,參數放在body裡面,不易被捕獲。 接下來借用代碼來示範四種請求方式的實現:第一種是使用:GET請求方式
 1 -(void)loginByGet 2 { 3     //1.建立NSURL對象,設計串連的地址 4     NSString *strURL =[NSString stringWithFormat:@"http://127.0.0.1/userManager/login.php?username=%@&password=%@",self.userNameTextField.text,self.passwordTextField.text]; 5     NSURL *url = [NSURL URLWithString:strURL]; 6      7     //2.建立NSURLRequest請求對象 8     NSURLRequest *request = [NSURLRequest requestWithURL:url]; 9     /**10      *  NSURLReqest 如果是不可變的,則不可設定逾時時間。11      */12     //3.建立NSURLConnection連線物件13     NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];14 15     //4.向伺服器發送請求16     [connection start];17 }

第二種是使用:POST請求方式

 1 -(void)loginByPost 2 { 3     //1.建立NSURL對象,設計串連的地址 4     NSString *strURL = @"http://127.0.0.1/userManager/login.php"; 5     NSURL *url = [NSURL URLWithString:strURL]; 6      7     //2.建立NSURLRequest請求對象 8     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 9     [request setTimeoutInterval:5.0];//設定連線逾時的等待時間;10     [request setHTTPMethod:@"post"];//佈建要求方式為POST11     //設定post帶的資料12     NSString *strBody = [NSString stringWithFormat:@"submit=1&username=%@&password=%@",self.userNameTextField.text,self.passwordTextField.text];13     NSData *dataBody = [strBody dataUsingEncoding:NSUTF8StringEncoding];14     //通過協議頭進行攜帶資料15     [request setHTTPBody:dataBody];16     17     //3.建立NSURLConnection連線物件18     NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];19     20     //向伺服器發送請求21     [conn start];22     23 }

第三種是使用:同步請求方式

 1 -(void)loginByPost 2 { 3     //1.建立NSURL對象,設計串連的地址 4     NSString *strURL = @"http://127.0.0.1/userManager/login.php"; 5     NSURL *url = [NSURL URLWithString:strURL]; 6     //2.建立NSURLRequest請求對象 7     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 8     [request setTimeoutInterval:5.0];//逾時時間 9     [request setHTTPMethod:@"post"];//設定使用post方式10     //設定post帶的資料11     NSString *strBody = [NSString stringWithFormat:@"submit=1&username=%@&password=%@",self.userNameTextField.text,self.passwordTextField.text];12     NSData *dataBody = [strBody dataUsingEncoding:NSUTF8StringEncoding];13     //通過協議頭進行攜帶資料14     [request setHTTPBody:dataBody];15     16     //3.建立NSURLConnection連線物件17     NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];18     //4.向伺服器發送請求19     [conn start];20     21     //清理資料22     NSData *data = [@"" dataUsingEncoding:NSUTF8StringEncoding];23     [self.allDatas setData:data];24     25 }

 

在使用NSURLConnection連線物件時,還需要實現<NSURLConnectionDataDelegate>代理方法

 1 #pragma mark - NSURLConnection代理方法 2 //收到伺服器返回的資料,可能會執行很多次,因為資料如果很大的話,會進行分包發送 3 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 4 { 5     //將所有資料區段進行拼接,將新接收的資料區段進行追加 6     [self.allDatas appendData:data]; 7 } 8 //串連過程中出錯處理 9 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error10 {11     NSLog(@"error reason:%@",error);12 }13 //資料接收完畢,做最後的資料處理14 -(void)connectionDidFinishLoading:(NSURLConnection *)connection15 {16     //當傳輸的檔案中,如果含有漢字的,系統無法識別這種編碼17     unsigned long encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);18     //按照encoding這種編碼方式,將接收到資料區段進行輸出19     NSString *request = [[NSString alloc]initWithData:self.allDatas encoding:encoding];20     NSLog(@"%@",request);21 }

在POST請求方式中,如果希望看到資料轉送的進度,可以通過實現以下方法進行列印輸出。

1 //以post方式傳資料時返回資料轉送的進度,僅限於以post方式2 -(void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite3 {4     NSLog(@"bytes:%ld,totalBytes:%ld,totalBytesExpected:%ld",bytesWritten,totalBytesWritten,totalBytesExpectedToWrite);5 }
 知識點補充:GET請求和POST請求方式

GET

  1. GET的語義是擷取指定URL上的資源
  2. 將資料按照variable=value的形式,添加到action所指向的URL後面,並且兩者使用“?”串連,各個變數之間使用“&”串連
  3. 不安全,因為在傳輸過程中,資料被放在請求的URL中
  4. 傳輸的資料量小,這主要是因為受URL長度限制

POST

  1. POST的語意是對指定資源“追加/添加”資料
  2. 將資料放在資料體中,按照變數和值相對應的方式,傳遞到action所指向URL
  3. 所有資料對使用者來說不可見
  4. 可以傳輸大量資料,上傳檔案只能使用Post
網路訪問的四個步驟
  • 第一步:確定地址——URL
  • 第二步:建立請求
  • 第三步:開始串連

等待網路處理中……

  • 第四步:串連完成,處理結果

iOS_網路編程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.