标签: nsurlrequest

当UIScrollView滚动时,NSURLRequest不会触发

我有一个问题,我试图在用户移动UIScrollView时后台加载声音文件...问题是我使用NSURLRequest所以我可以在后台加载,但即便如此它拒绝实际加载直到UIScrollView已停止滚动.:(

我能做些什么吗?

谢谢!

objective-c uiscrollview nsurlrequest ipad ios

13
推荐指数
1
解决办法
2342
查看次数

你能否在不破坏后退按钮的情况下拦截UIWebView中的NSURLRequests?

我无法在UIWebView不破坏其goBack方法的情况下将自定义HTML加载到我身上.

什么有用

我正在拦截我的URL请求,UIWebView所以我可以加载自定义HTML.我控制了所有的HTML,所以我有我的特殊应用程序请求使用myapp://arg1/?arg2=val我可以解析的自定义方案(即.)webView:shouldStartLoadWithRequest:navigationType:.我决定我真正想要加载和调用哪些HTML loadHTMLString:baseURL并返回NO以取消原始请求.

什么行不通

以上工作很棒.问题是我想使用该UIWebView's goBack方法,并且loadRequest:似乎是UIWebView添加到其历史堆栈的唯一方法.

我有一些想法,但我不确定哪些是可行的以及如何解决它们.最主要的似乎是,我必须返回YESwebView:shouldStartLoadWithRequest:navigationType,我必须使用UIWebViewloadRequest方法.

想法1:修改NSURLRequest/Response: 我可以将NSURLRequest子类化,以便(当UIWebView发出请求时)它实际上不会发出HTTP请求并返回带有我的HTML的NSURLResponse吗?或者可能以某种方式修改/子类/添加类别方法到NSURLResponse?我喜欢它是一个真正的请求,但我担心私有API并被App Store拒绝.

想法2:处理自定义URL协议 注册自定义URL协议,以便我的应用程序响应它,我可以让它返回合法的NSURLResponse(填充我的自定义HTML.)

想法3:欺骗缓存用这个缓存策略创建请求,NSURLRequestReturnCacheDataDontLoad然后以某种方式在webView和缓存之间获取我的HTML?

或许我完全走错了轨道?

cocoa-touch uiwebview nsurlrequest ios

13
推荐指数
3
解决办法
1万
查看次数

什么时候UIWebView中的缓存开始工作?

我一直在测试一个iPhone视图控制器,它使用UIWebView加载外部内容,而不是项目包中的资源.另一位工程师注意到Web视图根本没有缓存,所以我进行了一些研究.一些较旧的问题表明UIWebView无法缓存外部内容.

以前关于UIWebView缓存的SO问题:

这些帖子非常混乱,但我注意到在iOS 4.0问世之前他们都被问到了.我测试了以下缓存方法,这看起来很简单.

NSURLRequest *request = [NSURLRequest requestWithURL:myUrl 
      cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30];
[webView loadRequest:request];
Run Code Online (Sandbox Code Playgroud)

这似乎在iOS 4.3上运行良好,但在iOS 3.0上根本不起作用.我通过将设备指向Charles代理(在iPhone上,设置 - > WiFi,手动代理)并将流量记录到我的服务器来测试.

UIWebView是否开始在iOS 4.0中观察缓存策略?任何人都可以证实这一点,还是我想象的事情?

iphone caching uiwebview nsurlrequest

13
推荐指数
1
解决办法
7158
查看次数

OAuth 2承载授权标头

通过更新客户端的API,HTTPBasicAuthication方法已替换为OAuth2 BearerAuthorization标头.

使用旧API我会执行以下操作:

NSURLCredential *credential = [NSURLCredential credentialWithUser:self.account.username 
                                                         password:self.account.token 
                                                      persistence:NSURLCredentialPersistenceForSession];

NSURLProtectionSpace *space = [[NSURLProtectionSpace alloc] initWithHost:kAPIHost
                                                                    port:443
                                                                protocol:NSURLProtectionSpaceHTTPS
                                                                   realm:@"my-api"
                                                    authenticationMethod:NSURLAuthenticationMethodHTTPBasic];
Run Code Online (Sandbox Code Playgroud)

但这不适用于Bearer标题.

现在通常我会添加标题我自己添加它像这样:

NSString *authorization = [NSString stringWithFormat:@"Bearer %@",self.account.token];
[urlRequest setValue:authorization forHTTPHeaderField:@"Authorization"];
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案的问题在于API将大多数调用重定向到其他URL,这与安全性有关.NSURLRequest重定向后,从请求中删除了Authorization标头,因为我无法将Bearer方法添加到其中,NSURLCredentialStorage因此重定向后无法再对其进行身份验证.

什么是好的解决方案?我只能想到捕获重定向并修改NSURLRequest它,所以它确实包括Bearer标题.但是怎么样?

nsurlconnection nsurlrequest ios oauth-2.0

13
推荐指数
1
解决办法
2万
查看次数

HTTP状态码411 - 需要的长度

我试图从服务器获取数据.我使用NSURLConnectionDelegate,NSURLConnectionDataDelegate.有代码(Objective-C).

-(void)sendRequest
{
NSURL* url = [[NSURL alloc] initWithString:@"http://SomeServer"];

NSMutableURLRequest* request = [[NSMutableURLRequest alloc] init];


NSString* reqBody = [NSString stringWithFormat:@"<tag>Content</tag>"];

NSData* reqData = [reqBody dataUsingEncoding:NSUTF8StringEncoding];

NSInputStream* stream = [NSInputStream inputStreamWithData:reqData];



[request setURL:url];
[request setHTTPBodyStream:stream];
[request setHTTPMethod:@"POST"];

self.wpData = [[NSMutableData alloc] init];
NSURLConnection* conection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

[conection start];

}

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

    [self.wpData setLength:0];    

}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d {
NSString* str = [[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding];

NSLog(@"RESPONSE DATA: %@",str);
[self.wpData appendData:d];
}
Run Code Online (Sandbox Code Playgroud)

但是当我使用时,我得到"411 …

objective-c nsurlconnection nsurlrequest ios http-status-code-411

13
推荐指数
1
解决办法
5万
查看次数

当方法不是POST时,NSURLRequest无法处理HTTP正文?

每当我在一个可变请求上设置一个主体,并将该方法设置为除POST之外的任何其他内容时,该主体不包含在请求中,当服务器回复时,我得到一个kCFErrorDomainCFNetwork错误303(kCFErrorHTTPParseFailure).将方法更改为POST是请求无需错误即可完成的所有操作.有没有办法将身体附加到其他方法,或者我们是否坚持POST一切?

这是提交代码:

NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:assembleURL]];// cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:45.0];

#if (SERVER_TARGET_ARGS_ALLOWED==1)
[req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[req setValue:@"application/json" forHTTPHeaderField:@"Accept"];

[req setHTTPMethod:ServerMessageMethods[operation]];    //value is @"POST" or other method name

#endif  

//run the payload into a JSON
SBJsonWriter *json = [[SBJsonWriter alloc] init];
NSString *encodedPayload = [json stringWithObject:payload];
encodedPayload = [NSString stringWithFormat:@"%@", [encodedPayload stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSData *dataPayload = [encodedPayload dataUsingEncoding:NSUTF8StringEncoding];
[req setHTTPBody:dataPayload];

NSURLConnection *conn = [NSURLConnection connectionWithRequest:req delegate:self];
Run Code Online (Sandbox Code Playgroud)

iphone cocoa nsurlrequest

12
推荐指数
2
解决办法
1万
查看次数

UIWebView和NSURLRequest上没有Internet连接处理

我有一个完全基于网络的应用程序,需要互联网连接才能导航.基本上是通过UIWebView查看的网站.

我需要能够告诉用户如果没有互联网连接,则无法加载任何页面.有一种简单的方法可以做到这一点.也许检查NSURLRequest是否失败?

干杯

objective-c uiwebview nsurlrequest ipad

12
推荐指数
1
解决办法
4608
查看次数

WKWebView的缓存

我的自定义互联网浏览器出了问题.我正在使用WKWebView.我的应用程序中有标签.如果我单击选项卡,则在WKWebView中加载新的NSURLRequest.我需要实现一个缓存.如果用户按下选项卡,我宁愿加载缓存数据而不是新数据.不幸的是这段代码不起作用:

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:URL cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:0.0];
[self.webView loadRequest:request];
Run Code Online (Sandbox Code Playgroud)

你能指导我如何为WKWebView实现缓存吗?

iphone nsurlrequest ios wkwebview

12
推荐指数
2
解决办法
2万
查看次数

如何获取HTTP post请求以获取响应iPhone应用程序的JSON对象?

我在服务器上运行的Web服务以XML格式或JSON格式返回数据.我想要请求JSON格式但使用HTTP Post方法.

任何帮助非常感谢.

提前致谢.

iphone cocoa-touch json nsurlrequest

11
推荐指数
1
解决办法
2万
查看次数

如何重试基于块的URL请求

我使用iOS7的新URL请求方法获取数据,如下所示:

NSMutableURLRequest *request = [NSMutableURLRequest
    requestWithURL:[NSURL URLWithString:[self.baseUrl 
    stringByAppendingString:path]]];

NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
    NSUInteger responseStatusCode = [httpResponse statusCode];

    if (responseStatusCode != 200) { 
        // RETRY (??????) 
    } else       
        completionBlock(results[@"result"][symbol]);
}];
[dataTask resume];
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不时收到HTTP响应,表明服务器无法访问(response code != 200)并需要向服务器重新发送相同的请求.

如何才能做到这一点?我如何完成上面评论所在的代码片段// RETRY

在我的示例中,我在成功获取后调用完成块.但是如何再次发送相同的请求呢?

谢谢!

cocoa objective-c nsurlrequest ios

11
推荐指数
2
解决办法
7483
查看次数