我需要执行一个同步 HTTP 请求,不跟随重定向,最好不使用实例变量,因为这将被合并到 j2objc项目。
我尝试过使用 NSURLConnection sendSynchronousRequest
,很遗憾不能轻易告诉它不要遵循重定向。
在告诉我不应该使用同步请求之前,请记住这段代码是为了模拟 Java 的 HttpUrlConnection
,对于 j2objc 而言,其行为本质上是同步的项目。 IosHttpUrlConnections
' native makeSynchronousRequest
的执行目前始终遵循重定向。它应该尊重 HttpUrlConnection.instanceFollowRedirects
field .
sendSynchronousRequest
。但是,我无法修改它以使用委托(delegate),因此无法不遵循重定向。你可以使用带有信号量的 NSURLSession,像这样创建:
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:self delegateQueue:nil];
NSURLSessionTask *task = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (data)
{
// do whatever you want with the data here
}
else
{
NSLog(@"error = %@", error);
}
dispatch_semaphore_signal(semaphore);
}];
[task resume];
// but have the thread wait until the task is done
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
你必须实现下面的NSURLSessionTaskDelegate
方法,并调用completionHandler block 传递null来停止重定向。
- (void)URLSessionNSURLSession *)session
taskNSURLSessionTask *)task
willPerformHTTPRedirectionNSHTTPURLResponse *)response
newRequestNSURLRequest *)request
completionHandlervoid (^)(NSURLRequest *))completionHandler
关于ios - NSUrlConnection 同步请求,没有以下重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27961107/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |