Tag: http

应用程序架构,当'状态改变'APNS失败

我已经看到了有关这个话题的几个问题。 但是,所有的简单的说,你只需要从其他手段恢复。 但是没有人解释其他方法是什么! 我找不到答案。 这也是这个问题的评论的后续。 假设我正在研究Uber应用程序。 司机需要知道乘客的位置。 一名乘客设置了123 XYZStreet一个取货地点。 2分钟后,她决定取消整个皮卡。 所以现在我需要通知司机。 这是一个重要的状态改变更新。 首先想到的是: 发送具有content-available:1的通知content-available:1以便在通知到达后立即更新应用程序;在didReceiveNotification中,我调用GET(PassengerInfoModel)并且还包含"alert" : "Pickup has been canceled. Don't go there'那么驱动程序也会被直观的通知,显然通知并不是pipe理更新的content-available的content-available被设置为1来pipe理。 但是这样做,当通知到达失败时仍然会发生什么情况? 那么最新的GET(PassengerInfoModel)将不会发生。 作为一个解决scheme,我听说过一个HEAD请求: HEAD方法与GET相同,除了服务器不能在响应中返回消息体 。 响应HEAD请求的HTTP头中包含的元信息应该与响应GET请求发送的信息相同。 这个方法可以用来获得有关请求隐含的实体的元信息,而不用传递实体主体本身。 此方法通常用于testing超文本链接的有效性,可访问性和最近的修改 。 不知道如果使用HEAD请求会发生什么,我们发现有更新! 然后,我们是否在HEAD的完成处理程序的成功情况下发出GET请求? Question1我们应该如何处理HEAD请求响应? (我猜测,服务器能够路由HEAD请求,必须有一些变化,但让我们假设这是超出了问题的范围)。 Question2我们多久需要做这个请求? 根据这个评论,一个解决scheme可能是在viewDidAppear设置一个重复计时器,例如每2分钟发一个HEAD请求。 这是一个好主意吗? Question3现在让我们说,我们做了HEAD请求,但GET(PassengerInfoModel)也是从其他2场景/ viewControllers请求。 服务器无法区分不同的场景/视图控制器。 我猜测一个解决scheme将是所有的应用程序的networking请求pipe理通过一个单身NetworkHandler。 这是一个好主意吗? 我知道这个问题很广泛,但是认为这个问题需要整体解决

使stringWithContentsOfURLasynchronous – 是否安全?

我试图通过同步地从后台线程运行它 – [NSString stringWithContentsOfURL:encoding:error:]asynchronous。 __block NSString *result; dispatch_queue_t currentQueue = dispatch_get_current_queue(); void (^doneBlock)(void) = ^{ printf("done! %s",[result UTF8String]); }; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, (unsigned long)NULL), ^(void) { result = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com/"] encoding:NSUTF8StringEncoding error:nil]; dispatch_sync(currentQueue, ^{ doneBlock(); }); }); 它的工作正常,最重要的是,它的asynchronous。 我的问题是,如果这样做是安全的,还是可以有任何线程问题等? 提前致谢 :)

iOS无法执行HTTP GET请求 – 错误域= NSURLErrorDomain代码= -1012

我正在尝试执行HTTP Get请求,但是我一直在获取Error Domain = NSURLErrorDomain Code = -1012错误。 我的代码是: @try { NSString *url = [[NSString alloc] initWithFormat:@"%@%@", @"http://api.mintchat.com/agent/chats/", agentSecret]; NSLog(@"******Agents Active List URL Str – %@", url); NSURL *nsUrl = [NSURL URLWithString:url]; NSLog(@"******Agents Active List URL – %@", nsUrl); // Make the request, returning a JSON response, just as a plain old string. //NSData *jsonDataString […]

如何使用AFNetworking为“PUT”请求设置数据?

我已经开始使用AFNetworking,当它做出简单的“GET”请求时,它运行良好。 但是现在我正在尝试做一个“POST” – 请求。 我使用下面的代码来执行“GET”请求。 查看AFHTTPClient的puthPath时 ,没有办法设置要用于身体的数据。 我的猜测是有另一种解决方法。 我一直在看AFHTTPOperation作为解决这个问题的方法。 但是我没有得到这个工作。 问题是,我不知道如何使用它与基本authentication。 有人能给我提示如何做一个简单的“POST” – 与AFNetworking的请求? AFHTTPClient* client = [AFHTTPClient clientWithBaseURL:ServerURL]; [client setAuthorizationHeaderWithUsername:self.username password:self.password]; NSString* resourcePath = [NSString stringWithFormat:@"/some/resource/%@", endPath]; [client getPath:resourcePath parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { // Success code omitted } failure:^(AFHTTPRequestOperation *operation, NSError *error) { // Some error handling code omitted } ];

将UIImage中的图像与其他POST数据一起以JPEG格式上传

我正在使用此Web服务制作Web服务和iOS应用程序。 Web服务的API接受带有两个POSTvariables的HTTP POST请求: picture[title]的标题 picture[picture]图片数据本身 现在用HTML这不是一个问题,因为Web浏览器构造请求,唯一我担心的是enctype="multipart/form-data" 。 但是对于iOS应用程序,我有两个问题,以及我现在要问的两个问题。 如何将图像select器或相机的UIImage转换为原始JPEG数据? 如何使用正确的POST数据来创buildNSURLRequest,它必须包含picture[title] -field作为纯文本, picture[picture]字段包含JPEG数据? 在服务器端,我使用Paperclip gem,与PHP的$_FILES相媲美。 我已经看到了一些上传图片的例子,但是这只包含了图片,而不是其他的POSTvariables。 谁能帮我? 谢谢。

iOS / Cocoa – NSURLSession – 处理基本的HTTPS授权

[编辑提供更多信息] (我没有使用AFNetworking来做这个项目,我将来可能会这样做,但是希望先解决这个问题/误会。) 服务器设置 我不能在这里提供真正的服务,但它是一个简单,可靠的服务,根据以下URL返回XML: https://开头的用户名:password@example.com/webservice 我想通过使用GET连接到通过HTTPS的URL,并确定任何身份validation失败(HTTP状态代码401)。 我已经确认Web服务可用,并且我可以成功(http状态码200)使用指定的用户名和密码从URL抓取XML。 我已经通过Web浏览器和AFNetworking 2.0.3完成了这个工作,并且使用了NSURLConnection。 我也证实,我在所有阶段使用正确的凭证。 鉴于正确的凭据和下面的代码: // Note: NO delegate provided here. self.sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; self.session = [NSURLSession sessionWithConfiguration:self.sessionConfig delegate:nil delegateQueue:nil]; NSURLSessionDataTask *dataTask = [self.session dataTaskWithURL:self.requestURL completionHandler: … 上面的代码将工作 。 它将成功连接到服务器,获得一个200的http状态码,并返回(XML)数据。 问题1 这种简单的方法在证书无效的情况下失败。 在这种情况下,完成块从不被调用,不提供状态码(401),并且最终任务超时。 试图解决scheme 我将一个委托分配给NSURLSession,并处理以下callback: -(void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { if (_sessionFailureCount == […]

在Unity iOS上创buildHTTP请求的方法?

我需要使用所有标准的RESTful方法发送HTTP请求,并访问请求的主体以便发送/接收JSON。 我看过, WebRequest.HttpWebRequest 这几乎是完美的,但是有些情况下,例如,如果服务器closures,GetResponse函数可能需要几秒钟的时间才能返回 – 因为它是一个同步方法 – 冻结该时期的应用程序。 BeginGetResponse这个方法的asynchronous版本似乎并不是asynchronous工作的(在Unity中),因为它仍然冻结了那个时期的应用程序。 UnityEngine.WWW# 由于某种原因,只支持POST和GET请求 – 但是我也需要PUT和DELETE(标准的RESTful方法),所以我没有更进一步的研究它。 的System.Threading 为了运行WebRequest.HttpWebRequest.GetResponse而不冻结我使用线程查看的应用程序。 线程似乎在编辑器中工作(但看起来非常不稳定 – 如果在应用程序退出时不停止线程,即使在停止时仍然在编辑器中运行),并且当iOS设备内置时因为我尝试启动一个线程(我忘了写下错误,现在我无法访问它)。 在本地iOS应用程序中运行线程,并使用桥接到Unity应用程序 可笑,甚至不会去尝试这个。 UniWeb 这个。 我想知道他们是如何pipe理的。 下面是我正在尝试的WebRequest.BeginGetResponse方法的示例, // The RequestState class passes data across async calls. public class RequestState { const int BufferSize = 1024; public StringBuilder RequestData; public byte[] BufferRead; public WebRequest Request; public Stream ResponseStream; // […]

将图像从iOS上传到PHP

我一直在努力将UIImage上传到networking服务器。 问题是,图像永远不会出现在服务器上。 一个来自HTML文件的正常POST是有效的。 我认为这是我的Objective-C代码中的一个问题。 这是我的Objective-C代码: NSData *imageData = UIImagePNGRepresentation(delegate.dataBean.image); NSString *urlString = [NSString stringWithFormat:@"%@test.php", delegate.dataBean.hosterURL]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString:urlString]]; [request setHTTPMethod:@"POST"]; NSString *boundary = [NSString stringWithString:@"—————————14737809831466499882746641449"]; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; NSMutableData *body = [NSMutableData data]; [body appendData:[[NSString stringWithFormat:@"rn–%@rn",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"uploadedfile\"; […]

如何使用HTTP标头发送非英文unicodestring?

我是HTTP相关事宜的新手。 我的问题是在iOS开发中,我想用HTTP Header发送一个string,所以我使用: [httpRequest setValue:@"nonEnglishString" forHTTPHeaderField:@"customHeader"]; 接收服务器是Python(Google App Engine),使用以下命令将string值保存为数据库模型中的string属性: dataEntityInstance.nonEnglishString = unicode(self.request.headers.get('customHeader') 但是,问题是当我尝试发送像韩文这样的非英文string时,它就像这样保存在HTTP标头中: Customheader = "\Uc8fc\Uba39\Uc774 \Uc6b4\Ub2e4"; 当它被Google App Engine收到并保存在DataStore中时,就会变成: ??? ?? 就好像它找不到unicode值的正确字符一样。 是不是可以或不允许使用HTTP标头发送非英文string? 如果我的iOS只使用setHTTPBody,它可以传输非英文string并正确保存到App Engine的DataStore。 [httpRequest setHTTPBody:[httpBody dataUsingEncoding:NSUTF8StringEncoding]]; 但我无法find正确的方法来实现相同的目标,使用HTTP头,就像Foursquare所做的许多API一样,并以基于Python的Google App Engine数据存储

Base64通过HTTP POST丢失数据(Objective-C)

我目前有一个HTTP POST请求和一个Base64编码库,我编码我的图像到B64然后发送通过HTTP通过POST方法。 我输出Base64到XCodes控制台,复制并粘贴它,它完美的工作。 尽pipe数据库中的Base64 I存储(MongoDB,纯文本文件等)总是在另一端损坏。 工作版本(复制并从XCode粘贴): http : //dontpanicrabbit.com/api/working.php破碎的版本(来自MongoDB数据库): http : //dontpanicrabbit.com/api/grabimage.php 如果您查看源代码,您会注意到它们是相同的,但是在破损的版本中添加了空格。 我正在使用的Objective-C代码是: MyImage.image = [info objectForKey:UIImagePickerControllerOriginalImage]; NSData *imageData = UIImageJPEGRepresentation(MyImage.image, 0); [Base64 initialize]; NSString *encoded = [Base64 encode:imageData]; NSString *urlPOST = encoded; //NSLog(@"%@",encoded); NSString *varyingString1 = @"picture="; NSString *varyingString2 = urlPOST; NSString *post = [NSString stringWithFormat: @"%@%@", varyingString1, varyingString2]; NSLog(@"%@", post); //NSString *post […]