最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
ios開(kāi)發(fā)post請(qǐng)求,蘋(píng)果post

iOS開(kāi)發(fā) GET、POST請(qǐng)求方法(NSURLConnection篇)

Web Service使用的主要協(xié)議是HTTP協(xié)議,即 超文本傳輸協(xié)議 。

10年積累的成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有漢川免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

HTTP/1.1協(xié)議共定義了8種請(qǐng)求方法(OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT)作為Web服務(wù)器。

GET方法 ,是向指定的資源發(fā)送請(qǐng)求,請(qǐng)求的參數(shù)“顯式”地在URL的后面。有點(diǎn)像明信片,把內(nèi)容“顯式”寫(xiě)在外面,因此安全性比較差。一般使用于讀取數(shù)據(jù)、例如從服務(wù)器讀取靜態(tài)圖片、或查詢(xún)數(shù)據(jù)等。

POST方法 ,是向指定資源提交數(shù)據(jù),請(qǐng)求服務(wù)器進(jìn)行處理,數(shù)據(jù)包含在 請(qǐng)求體 中。參數(shù)和地址分開(kāi),放在body里面。有點(diǎn)像把信內(nèi)容放在信封中,接觸的人看不到,安全性比較高。一般用于例如提交表單、上傳文件等(請(qǐng)求的的動(dòng)態(tài)資源,與查詢(xún)類(lèi)似,每個(gè)方法調(diào)用都要傳遞很多參數(shù),因此需要使用NSMutableURLRequest創(chuàng)建請(qǐng)求。 )

iOS SDK中為HTTP請(qǐng)求提供了同步和異步請(qǐng)求這兩種不同的API,

同步請(qǐng)求,可以從因特網(wǎng)請(qǐng)求數(shù)據(jù),一旦發(fā)送同步請(qǐng)求,程序?qū)⑼V褂脩?hù)交互,直至服務(wù)器返回?cái)?shù)據(jù)完成,才可以進(jìn)行下一步操作,意味著線程阻塞;

異步請(qǐng)求,不會(huì)阻塞主線程,而會(huì)建立一個(gè)新的線程來(lái)操作,用戶(hù)發(fā)出異步請(qǐng)求后,依然可以對(duì)UI進(jìn)行操作,程序可以繼續(xù)運(yùn)行;

它們的主要區(qū)別在于連接方式的不同。

下面通過(guò)請(qǐng)求一個(gè)登陸接口介紹有關(guān)于網(wǎng)絡(luò)請(qǐng)求中的不同情況。

【本次開(kāi)發(fā)環(huán)境: Xcode:7.2 ? ??iOS Simulator:iphone6 ? By:啊左】

一、GET方法

1.同步get方法:

//1.創(chuàng)建一個(gè)web路徑?

NSString*webPath=[NSString?stringWithFormat:@";pass=%@btn=login",yourname,yourpass]; ? ? ?

webPath=[webPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];?//url不允許為中文等特殊字符,需要進(jìn)行字符串的轉(zhuǎn)碼為URL字符串,例如空格轉(zhuǎn)換后為“%20”;? ? ?

NSURL *url=[NSURL URLWithString:webPath];? ? ??

//2.根據(jù)WEB路徑創(chuàng)建一個(gè)請(qǐng)求? ? ?

NSURLRequest? *request=[NSURLRequest requestWithURL:url];? ? ? ? ?

NSURLResponse *respone;//獲取連接的響應(yīng)信息,可以為nil? ? ?

NSError *error;? ? ? ? //獲取連接的錯(cuò)誤時(shí)的信息,可以為nil? ??

//3.得到服務(wù)器數(shù)據(jù)? ??

NSData*data=[NSURLConnection sendSynchronousRequest: request returningResponse: respone error: error];? ??

if(data==nil)? ? {? ? ? ? NSLog(@"登陸失敗:%@,請(qǐng)重試",error);? ? ? ? return;? ? }?

/*? ? ? ? 4.對(duì)服務(wù)器獲取的數(shù)據(jù)data進(jìn)行相應(yīng)的處理;? */

2.異步get方法:

異步請(qǐng)求與同步請(qǐng)求的不同在于使用NSURLConnectionDataDelegate委托協(xié)議,指定代理.

@interface ViewController : UIViewController // 遵循協(xié)議

@property (weak,nonatomic) NSMutableData *receiveData;? //創(chuàng)建一個(gè)可變data,用于異步接收服務(wù)器的數(shù)據(jù)

@end

創(chuàng)建網(wǎng)絡(luò)請(qǐng)求:

//1.創(chuàng)建一個(gè)web路徑

NSString*webPath=[NSString stringWithFormat: @";pass=%@btn=login",yourname,yourpass];

webPath=[webPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL? *url=[NSURL URLWithString:webPath];

//2.根據(jù)WEB路徑創(chuàng)建一個(gè)請(qǐng)求

NSURLRequest *request=[NSURLRequest requestWithURL:url];

//3.指定代理 以異步的方式接收數(shù)據(jù)NSURLConnectionDataDelegate

NSURLConnection? *con=[NSURLConnection connectionWithRequest:request delegate:self];

if(con==nil)

{

NSLog(@"創(chuàng)建連接失敗.");

return;

}

else//成功 準(zhǔn)備接數(shù)據(jù)

{

if(self.receiveData==nil)

{

self.receiveData=[[NSMutableData alloc] init];

}

}

異步的代理行為:

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{? ??

NSLog(@"已經(jīng)響應(yīng)成功.");

//清空 為當(dāng)前連接做準(zhǔn)備? ??

self.receiveData.length=0;

}

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{? ? NSLog(@"已經(jīng)接收到了數(shù)據(jù).");? ??

//追加接收到的數(shù)據(jù)? ??

[self.receiveData appendData:data];

}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{? ??

NSLog(@"接收數(shù)據(jù)已經(jīng)完成.");?

/*? ? ? 對(duì)服務(wù)器獲取的數(shù)據(jù)receiveData進(jìn)行相應(yīng)的處理;? */

}

-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{? ? NSLog(@"連接失敗.");

}

二、POST方法

1.同步post方法:

//1.創(chuàng)建一個(gè)web路徑? ??

NSString? *webPath=@""; ??

webPath = [webPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];? ? NSURL *url=[NSURL URLWithString:webPath];

//2.建立一個(gè)帶協(xié)議緩存類(lèi)型的請(qǐng)求 (使用NSMutableURLRequest,是post方法的關(guān)鍵)? ? NSMutableURLRequest? *request=[NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];? ? ? ? //3.設(shè)置表單提交的方法(默認(rèn)為get)? ? [request setHTTPMethod: @"post"];

//4.設(shè)置要提交的參數(shù)? ? NSString? *args=[NSString stringWithFormat:@"uname=%@upas=%@btn=login",uname,upas];? ? [request setHTTPBody: [args dataUsingEncoding:NSUTF8StringEncoding]];

NSData *recvData=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];? ? if(recvData!=nil)? ? {

/*

對(duì)服務(wù)器獲取的數(shù)據(jù)recvData進(jìn)行相應(yīng)的處理

*/

}

else

{

NSLog(@"連接失敗,請(qǐng)重試!");

}

2.post方法的異步與同步的區(qū)別在于使用NSURLConnectionDataDelegate委托協(xié)議,指定代理.

這一點(diǎn)與get方法一致,所以就不進(jìn)行長(zhǎng)篇幅的演示了。

以上就是關(guān)于部分網(wǎng)絡(luò)同步異步請(qǐng)求,get、post請(qǐng)求方法的演示,由于UI控件還有其他的處理沒(méi)有附上,具體的讀者可以進(jìn)行相應(yīng)細(xì)節(jié)的調(diào)整,進(jìn)行完整的網(wǎng)絡(luò)請(qǐng)求項(xiàng)目開(kāi)發(fā)。

由于iOS開(kāi)始,引入了新的網(wǎng)絡(luò)接口NSURLSession,而在iOS9中NSURLConnection被宣布棄用,因此關(guān)于NSURLSession發(fā)送GET和POST請(qǐng)求的資料部分,有興趣的可以參考:

iOS開(kāi)發(fā) GET、POST請(qǐng)求方法(NSURLSession篇)

? by:啊左~

iOS開(kāi)發(fā),如何設(shè)置post異步請(qǐng)求超時(shí)?

如果你用的 AFNetworking- (NSMutableURLRequest *)requestWithMethod:(NSString *)method path:(NSString *)path parameters:(NSDictionary *)parameters//方法通過(guò)添加 [request setTimeoutInterval:10.0];如果是 ASIHTTPRequest[request setNumberOfTimesToRetryOnTimeout:2]; NSMutableURLRequest是NSURLRequest的子類(lèi),常用方法有設(shè)置請(qǐng)求超時(shí)等待時(shí)間(超過(guò)這個(gè)時(shí)間就算超時(shí),請(qǐng)求失?。㎞SMutableURLRequest *urlRequest = [[NSMutableURLRequestalloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:10]; NSURLConnection *_connection = [[NSURLConnectionalloc] initWithRequest:urlRequest delegate:selfstartImmediately:YES];一個(gè)用來(lái)創(chuàng)建請(qǐng)求,一個(gè)用來(lái)將請(qǐng)求發(fā)送出去。然后我們實(shí)現(xiàn) NSUrlConnectionDelegate 的幾個(gè)回調(diào)函數(shù)就能完成整個(gè)流程了。 一般發(fā)送網(wǎng)絡(luò)請(qǐng)求都會(huì)去設(shè)置一個(gè)超時(shí)時(shí)間,防止請(qǐng)求在那一直等待。根據(jù)不同的場(chǎng)景,我們還需要設(shè)置不同的超時(shí)時(shí)間。在上面的代碼中我們?cè)O(shè)置了10秒超時(shí)。上面的故事看起來(lái)很完美。但是 apple的開(kāi)發(fā)人員在這里給我們挖了一個(gè)坑。如果你的請(qǐng)求是個(gè)簡(jiǎn)單的“Get”請(qǐng)求,或者木有 body的“post”請(qǐng)求。一切都是那么完美,請(qǐng)求能夠按照我們?cè)O(shè)定的時(shí)間自動(dòng)超時(shí)。但是如果你發(fā)的是個(gè)“POST”請(qǐng)求,并且[urlRequest setHTTPBody:httpBody]; 那么,不好意思,你被潛規(guī)則了。ios3.0 以后 蘋(píng)果的sdk對(duì)這種情況做了調(diào)整,如果是post請(qǐng)求,并且設(shè)置了 httpBody,那么請(qǐng)求的超時(shí)時(shí)間就被默認(rèn)設(shè)置為 240 秒了。就算你再使用[urlRequest setTimeoutInterval:10];也是無(wú)效的,我們可以再設(shè)置完成后再讀取這個(gè)值,發(fā)現(xiàn)它不會(huì)變成10,依然保持240秒。于是乎,網(wǎng)絡(luò)不穩(wěn)定的時(shí)候,你的程序就可能會(huì)陷入漫長(zhǎng)的等待。發(fā)現(xiàn)這個(gè)問(wèn)題后。我們通過(guò)自己起timer的方式來(lái)控制超時(shí)。具體怎么弄這里就不細(xì)說(shuō)。只說(shuō)下我們的策略。我們將整個(gè)網(wǎng)絡(luò)過(guò)程分為 鏈接建立,發(fā)送數(shù)據(jù),數(shù)據(jù)發(fā)送完成等待回包,接收數(shù)據(jù) 4個(gè)階段來(lái)控制具體的超時(shí)。 設(shè)置我們的標(biāo)準(zhǔn)超時(shí)時(shí)間為 N (系統(tǒng)默認(rèn)為 10秒,網(wǎng)絡(luò)模塊通過(guò)暴露相關(guān)接口,調(diào)用方可自由設(shè)置)鏈接建立鏈接超時(shí)時(shí)間: N * 1.5 每數(shù)據(jù)包發(fā)送超時(shí)時(shí)間: N * 1.5 數(shù)據(jù)發(fā)送完成等帶回包超時(shí): N * 2 每數(shù)據(jù)包接收超時(shí)時(shí)間: N * 1 以上超時(shí)分別在 NSUrlConnectionDelegate 的各個(gè)回調(diào)階段進(jìn)行相關(guān)設(shè)置就能達(dá)到比較精細(xì)的控制。特別說(shuō)明下,為什么數(shù)據(jù)發(fā)送完成后等待回包的超時(shí)會(huì)設(shè)置的比較長(zhǎng)。因?yàn)樵趯?shí)際測(cè)試過(guò)程中發(fā)現(xiàn)發(fā)包完成到接收到第一個(gè)數(shù)據(jù)包比較耗時(shí),一般httpbody越大越明顯,初步猜測(cè)是網(wǎng)絡(luò)模塊在發(fā)送數(shù)據(jù)緩沖區(qū)的數(shù)據(jù),所以這里做了特殊的控制。 部分內(nèi)容來(lái)自于博客園《NSURLCONNECTION 網(wǎng)絡(luò)超時(shí)的那些事?!?/p>

ios post請(qǐng)求參數(shù)怎么寫(xiě)

隨著asihttprequest的停止更新,許多人都轉(zhuǎn)向了AFNetworking、 MKNetworkKit.我也是其中一個(gè)。于是我從網(wǎng)上找了許多文章作參考,但是結(jié)果都是失敗告終。研究了好久都搞不透,最后還是請(qǐng)人幫忙搞定了。經(jīng)常從網(wǎng)上索取免費(fèi)資料的一員,要有回報(bào)的思想,也為了讓更多的人少走些彎路,所以下面是代碼:(有錯(cuò)誤可以指出)

首先:將AFNetworking、UIKit+AFNetworking 加入到工程

然后在要使用的地方

#import "AFHTTPRequestOperationManager.h"

#import "AFHTTPSessionManager.h"

AFHTTPRequestOperationManager的post有兩個(gè)方法,一個(gè)是普通的post,另一個(gè)是可以上傳圖片的

1.上傳圖片:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObject:@"text/html"];

NSDictionary *parameters =@{@"參數(shù)1":@"value1",@"參數(shù)2":@"value2"、、、};

NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"1.png"], 1.0);

[manager POST:@"替換成你要訪問(wèn)的地址"parameters:parametersconstructingBodyWithBlock:^(idAFMultipartFormData formData) {

[formData appendPartWithFileData :imageData name:@"1" fileName:@"1.png" mimeType:@"image/jpeg"];

} success:^(AFHTTPRequestOperation *operation,id responseObject) {

NSLog(@"Success: %@", responseObject);

} failure:^(AFHTTPRequestOperation *operation,NSError *error) {

NSLog(@"Error: %@", error);

}];

這個(gè)方法可以上傳圖片,如果不用上傳圖片,可以把這句去掉[formData appendPartWithFileData :imageDataname:@"1"fileName:@"1.png"mimeType:@"image/jpeg"]

2.普通的post

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObject:@"text/html"];

NSDictionary *parameters = @{@"參數(shù)1":@"value1",@"參數(shù)2":@"value2"、、、};

[managerPOST:@"替換成你要訪問(wèn)的地址"parameters:parameters

success:^(AFHTTPRequestOperation *operation,id responseObject) {

NSLog(@"Success: %@", responseObject);

}failure:^(AFHTTPRequestOperation *operation,NSError *error) {

NSLog(@"Error: %@", error);

}];

可以參考一下。AFNetworking-2.0.3

IOS http請(qǐng)求的get 和 post的請(qǐng)求的區(qū)別

簡(jiǎn)單的說(shuō):1.get請(qǐng)求指示單純的想服務(wù)器獲取信息,不會(huì)改變數(shù)據(jù),post請(qǐng)求可以修改數(shù)據(jù),也就是說(shuō)get只能 用于獲取信息,post可以獲取信息也可以修改、增加數(shù)據(jù);

2.get適用于小數(shù)據(jù)的交互,如果數(shù)據(jù)量較大就必須要用post請(qǐng)求;

3.安全性:get請(qǐng)求安全性低,post安全性高,post會(huì)把請(qǐng)求參數(shù)隱藏,get請(qǐng)求會(huì)曝露參數(shù);

建議:

1、get方式的安全性較Post方式要差些,包含機(jī)密信息的話,建議用Post數(shù)據(jù)提交方式;

2、在做數(shù)據(jù)查詢(xún)時(shí),建議用Get方式;而在做數(shù)據(jù)添加、修改、或刪除時(shí),建議用Post方式;我是做ios開(kāi)發(fā)的,如果有其他問(wèn)題歡迎一起研究討論,q:

ios開(kāi)發(fā) 怎么發(fā)送post請(qǐng)求

NSURL *url = [NSURL URLWithString:urlStr];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15];

[request setHTTPMethod:@"POST"];

NSString *parametersStr = [self getPostStr:parameters];//eg :@"city=szname=jack"

NSData *data = [parametersStr dataUsingEncoding:NSUTF8StringEncoding];

[request setHTTPBody:data];

////////////

NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];

[connection start];

/////////

各種connection回調(diào)。。。。

就不詳細(xì)說(shuō)明了

#pragma mark - 網(wǎng)絡(luò)請(qǐng)求回調(diào)

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

self.mTempData = [[NSMutableData alloc]initWithCapacity:10];

}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

[self.mTempData appendData:data];

}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

{

self.recievedData = self.mTempData;

NSString *jsonString = [[NSString alloc]initWithData:self.recievedData encoding:NSUTF8StringEncoding];

NSLog(@"HttpCallBack_connectionRecieved Data:%@",jsonString);

//將字符串寫(xiě)到緩沖區(qū)。

NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

//解析json數(shù)據(jù),使用系統(tǒng)方法 JSONObjectWithData: options: error:

NSDictionary* dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSUTF8StringEncoding error:nil];

if ([_target respondsToSelector:@selector(HttpConnectionCallback:path:)]) {

dispatch_async(dispatch_get_main_queue(), ^{

[_target HttpConnectionCallback:dic path:_path];

});

}

}

//failure

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

{

if ([_target respondsToSelector:@selector(HttpConnectionFailed:path:)]) {

dispatch_async(dispatch_get_main_queue(), ^{

[_target HttpConnectionFailed:error path:_path];

});

}

}

iOS開(kāi)發(fā)之WebView怎么加載post請(qǐng)求并且傳參數(shù)

由于種種因素,現(xiàn)在國(guó)內(nèi)的移動(dòng)開(kāi)發(fā)大都是原生和html5混合開(kāi)發(fā), 那么iOS端的UIWebView和WKWebView就啟到了非常重要的作用! 而從我們?cè)?yè)面跳轉(zhuǎn)的web頁(yè)面的時(shí)候我們往往需要像前端傳遞參數(shù),今天我們要說(shuō)的就是:webView怎么加載post請(qǐng)求并傳遞參數(shù)!

代碼如下:

UIWebView?*webView?=?[[UIWebView?alloc]?init];

NSString?*bodyShare?=?[NSString?stringWithFormat:?@"hID=%@",?userID];

NSMutableURLRequest?*?requestShare?=?[[NSMutableURLRequest?alloc]initWithURL:[NSURL?URLWithString:self.urlStr]];

[requestShare?setHTTPMethod:?@"POST"];

[requestShare?setHTTPBody:?[bodyShare?dataUsingEncoding:?NSUTF8StringEncoding]];

[webView?loadRequest:requestShare];

當(dāng)然與之相對(duì)應(yīng)的還有g(shù)et請(qǐng)求來(lái)傳遞參數(shù)的,代碼如下:

UIWebView?*webView?=?[[UIWebView?alloc]?init];

self.urlStr?=?[NSString?stringWithFormat:@"%@/tokenredirect?ostype=iphonetoken=%@time=%@",kServerPrefixURL,token,time];

NSURLRequest?*?requestShare?=?[[NSURLRequest?alloc]initWithURL:[NSURL?URLWithString:self.urlStr]];

[webView?loadRequest:requestShare];


當(dāng)前名稱(chēng):ios開(kāi)發(fā)post請(qǐng)求,蘋(píng)果post
文章URL:http://fisionsoft.com.cn/article/dsccogh.html