1、如何实现iOS终端于服务器之间的数据交互
IOS开发终端和服务器交互目前都是通过restful api的形式。
IOS终端列出需要的API接口,服务端实现这些接回口,中间通过答http协议通信来交互。
REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。
Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。
在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI (Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输
2、ios通过什么方法能获取到服务器部署的ssl证书
如果iOS APP用了服务器,需要防止数据嗅探,防止中间人利用伪造证书窃取流量,保护数据安全,这就需要为APP设置HTTPS加密连接。APP设置HTTPS加密连接,需要先向权威CA机构(如沃通WoSign)申请Web服务器的SSL证书,通过网络开源库AFNetworking 的安全相关设定配置HTTPS请求,获取服务器部署的SSL证书。按照下列方法设置AFNetworking。
设置AFN请求管理者的时候 添加 https ssl 验证。
// 1.获得请求管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 2.加上这个函数,https ssl 验证。
[manager setSecurityPolicy:[self customSecurityPolicy]];
// https ssl 验证函数
- (AFSecurityPolicy *)customSecurityPolicy {
// 先导入证书
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"cer"];//证书的路径
NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
// AFSSLPinningModeCertificate 使用证书验证模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
// allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
//validatesDomainName 是否需要验证域名,默认为YES;
3、ios 服务器返回错误码怎么拿到
ios向服务端发起请求报错:内部服务器错误 (500),有需要的朋友可以参考下。
ios端运用AFHTTP框架向服务端发起请求,但是报错:
<span style="font-size:10px;">Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: 内部服务器错误 (500)" UserInfo=0x17f95580 {com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x17daddb0> { URL: http://192.168.1.68/Interface/MessageService.asmx/RegNewsLog } { status code: 500, headers {
"Cache-Control" = private;
"Content-Length" = 28;
"Content-Type" = "text/plain; charset=utf-8";
Date = "Mon, 23 Mar 2015 01:40:47 GMT";
Server = "Microsoft-IIS/7.5";
"X-AspNet-Version" = "4.0.30319";
"X-UA-Compatible" = "IE=EmulateIE7";
"content-script-type" = "text/javascript";
"content-style-type" = "text/css";
} }, NSErrorFailingURLKey=http://192.168.1.68/Interface/MessageService.asmx/RegNewsLog, NSLocalizedDescription=Request failed: 内部服务器错误 (500), com.alamofire.serialization.response.error.data=<e7bcbae5 b091e58f 82e695b0 3a204c6f 6e676974 756465e3 80820d0a>}
</span>
查找原因:
a、一开始以为是传回来的格式不正确,默认是传回json数据的,但是我调用的这个方法返回的是字符串数据。所以将服务端返回的数据改成json,还是出错。
b、将服务端的后台代码全都注释,排除是否因为服务端的代码出错,导致返回失败。整个函数直接返回一个json字符,还是报错,
c、那就是入参的问题了,查看传入参数的名称,发现服务端的其中一个参数名称为:Longitude,但是我传过去的是Longtitude,就差了一个t,导致了服务端不认传过来的参数所以报错。
总结:
1、以后进行服务端请求时,应该完全把服务端的入参名称粘贴过来就可以了,不要自己写。容易造成不一致(不一定哪端没写对)
2、服务端报错不一定全都是服务端的原因,完全有可能是客户端的入参有问题,导致服务端出错。
4、ios post请求ur无法连接到服务器什么原因
随着asihttprequest的停止更新,许多人都转向了AFNetworking、 MKNetworkKit.我也是其中一个。于是我从网上找了许多文章作参考,但是结果都是失败告终。研究了好久都搞不透,最后还是请人帮忙搞定了。经常从网上索取免费资料的一员,要有回报的思想,也为了让更多的人少走些弯路,所以下面是代码:(有错误可以指出)首先:将AFNetworking、UIKit+AFNetworking 加入到工程然后在要使用的地方#import "AFHTTPRequestOperationManager.h"#import "AFHTTPSessionManager.h"AFHTTPRequestOperationManager的post有两个方法,一个是普通的post,另一个是可以上传图片的1.上传图片:AFHTTPRequestOperationManager *manager = [];manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObject:@"text/html"];NSDictionary *parameters =@{@"参数1":@"value1",@"参数2":@"value2"、、、};NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"1.png"], 1.0);[manager POST:@"替换成你要访问的地址"parameters::^(id<AFMultipartFormData> 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);}];这个方法可以上传图片,如果不用上传图片,可以把这句去掉[formData appendPartWithFileData :imageDataname:@"1"fileName:@"1.png"mimeType:@"image/jpeg"]2.普通的 *manager = [];manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObject:@"text/html"];NSDictionary *parameters = @{@"参数1":@"value1",@"参数2":@"value2"、、、};[managerPOST:@"替换成你要访问的地址"parameters:parameterssuccess:^(AFHTTPRequestOperation *operation,id responseObject) {NSLog(@"Success: %@", responseObject);}failure:^(AFHTTPRequestOperation *operation,NSError *error) {NSLog(@"Error: %@", error);}];
5、IOS http请求的get 和 post的请求的区别
Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求;
Get是获取信息,而不是修改信息,类似数据库查询功能一样,数据不会被修改;
Get请求的参数会跟在url后进行传递,请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连,%XX中的XX为该符号以16进制表示的ASCII,如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密。
Get传输的数据有大小限制,因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了,不同的浏览器对URL的长度的限制是不同的。
GET请求的数据会被浏览器缓存起来,用户名和密码将明文出现在URL上,其他人可以查到历史浏览记录,数据不太安全。在服务器端,用Request.QueryString来获取Get方式提交来的数据。
Post请求则作为http消息的实际内容发送给web服务器,数据放置在HTML Header内提交,Post没有限制提交的数据。Post比Get安全,当数据是中文或者不敏感的数据,则用get,因为使用get,参数会显示在地址,对于敏感数据和不是中文字符的数据,则用post。
POST表示可能修改变服务器上的资源的请求,在服务器端,用Post方式提交的数据只能用Request.Form来获取。
6、ios怎样获取服务器的ip地址
1.首先获取你的应用的id。这个可以在itunes上获取链接中有ID。 2.发送POST请求 NSString *URL = @"http://itunes.apple.com/lookup?id=你的应用ID"; 3.从服版务器返回的数据中取出version这个值就权是版本号。接下来在进行比较
7、服务器如何判别用户请求的设备为iOS还是Android设备还是windows...
通过 Agent 来判断相应的智能手机设备,然后跳转到新的手机站点
经过不懈的努力,终于搜集了比较全的 智能设备 的 Agent,然后又写了程序,直接上代码吧,希望能帮助到你
Js代码
/// 根据 Agent 判断是否是智能手机
///</summary>
///<returns></returns>
public static bool CheckAgent()
{
bool flag = false;
string agent = HttpContext.Current.Request.UserAgent;
string[] keywords = { "Android", "iPhone", "iPod", "iPad", "Windows Phone", "MQQBrowser" };
//排除 Windows 桌面系统
if (!agent.Contains("Windows NT") || (agent.Contains("Windows NT") && agent.Contains("compatible; MSIE 9.0;")))
{
//排除 苹果桌面系统
if (!agent.Contains("Windows NT") && !agent.Contains("Macintosh"))
{
foreach (string item in keywords)
{
if (agent.Contains(item))
{
flag = true;
break;
}
}
}
}
return flag;
}
8、ios与服务器如何进行数据交互
请求数据和服务器交互
9、关于iOS post 请求的办法 我现在需要发送一组二进制数据到服务器,然后获取结果,应当如何操作啊?
NSURLRequest *theRequest=[NSURLRequestrequestWithURL:[NSURLURLWithString:url] cachePolicy::Http_Request_Timeout];
NSURLConnection conn1 = [[NSURLConnectionalloc] initWithRequest:theRequest delegate:self];
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
}