• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - NSUrlConnection 同步请求,没有以下重定向

[复制链接]
菜鸟教程小白 发表于 2022-12-12 13:46:29 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

问题

我需要执行一个同步 HTTP 请求,不跟随重定向,最好不使用实例变量,因为这将被合并到 j2objc项目。

我尝试了什么

我尝试过使用 NSURLConnection sendSynchronousRequest,很遗憾不能轻易告诉它不要遵循重定向。

背景

在告诉我不应该使用同步请求之前,请记住这段代码是为了模拟 Java 的 HttpUrlConnection ,对于 j2objc 而言,其行为本质上是同步的项目。 IosHttpUrlConnections' native makeSynchronousRequest的执行目前始终遵循重定向。它应该尊重 HttpUrlConnection.instanceFollowRedirects field .

进行了进一步研究

  • 在异步模式下使用 NSUrlConnection 时,会调用委托(delegate)方法,该方法允许启用/禁用重定向。但是,我需要同步操作。
  • This answer on NSUrlconnection: How to wait for completion展示了如何使用异步请求实现 sendSynchronousRequest。但是,我无法修改它以使用委托(delegate),因此无法不遵循重定向。

希望你能帮助我



Best Answer-推荐答案


你可以使用带有信号量的 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap