Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 不接受重定向的NSUrlConnection同步请求_Macos_Delphi_Nsurlconnection_Lazarus - Fatal编程技术网

Macos 不接受重定向的NSUrlConnection同步请求

Macos 不接受重定向的NSUrlConnection同步请求,macos,delphi,nsurlconnection,lazarus,Macos,Delphi,Nsurlconnection,Lazarus,我目前正在Delphi/Lazarus程序中实现使用macosapi进行HTTP/HTTPs请求的代码 该代码在自己的线程中运行,即不是main/ui线程,并且是跨Windows/Mac和Delphi/Lazarus的更大的基于线程的爬虫程序的一部分。我尝试使用OS API实现实际的HTTP/S请求部分,但我自己处理HTTP头的处理和操作 这意味着如果可能的话,我想继续使用同步模式 我希望请求只返回服务器返回的内容 我不希望它跟随重定向 我目前使用sendSynchroniousRequest\

我目前正在Delphi/Lazarus程序中实现使用macosapi进行HTTP/HTTPs请求的代码

该代码在自己的线程中运行,即不是main/ui线程,并且是跨Windows/Mac和Delphi/Lazarus的更大的基于线程的爬虫程序的一部分。我尝试使用OS API实现实际的HTTP/S请求部分,但我自己处理HTTP头的处理和操作

这意味着如果可能的话,我想继续使用同步模式

我希望请求只返回服务器返回的内容

我不希望它跟随重定向

我目前使用sendSynchroniousRequest\u returningResponse\u error


我曾尝试搜索谷歌,但似乎没有办法使用同步请求?这似乎有点奇怪

不,NSURLConnection的同步功能非常有限,而且从未扩展过,因为它非常不受欢迎。这就是说,从技术上讲,实现您试图做的事情是可能的

我的记忆是,从用NSURLSession等价物替换该方法一次到在仅二进制库中用泄漏较少的方法替换该方法,基本上您需要编写一个方法,使用共享字典为每个NSURLSessionDataTask存储一个信号量,并使用数据任务作为键。然后,将信号量的计数设置为零,以便在等待信号量时立即阻塞,在主线程上异步启动异步请求,然后在当前线程中等待信号量。在异步数据任务的完成处理程序块中,增加信号量,从而取消阻止调用线程

诀窍是确保会话在一个线程上运行回调,而不是在等待信号量的当前线程上运行回调。因此,在实际启动数据任务时,需要将_async分派到主线程中


从表面上看,如果您支持在相关委托方法中将任务转换为下载任务或流任务,您还需要采取适当的操作来更新共享字典,但我假设您不会使用该功能:-

正是为了同步通信:谢谢——但我也已经实现了Indy——但我正试图摆脱Indy和Synapse对OpenSSL的依赖。最新OSX版本附带的OpenSSL库不适用于使用CloudFlare SSL证书的网站。是的,我可以自己分发OpenSSL,但我不这么认为。让用户自行安装OpenSSL是不可能的-这就是为什么我现在在Windows上也支持WinInet/IE后者用于AJAX的部分原因,也是为什么我开始通过本机Mac API支持HTTP/HTTPS的原因。您不能在Lazarus中使用THTTPClient吗?THTTPClient only文档中指出,这也要求OpenSSL与它一起分发/在系统上找到。整个问题在于,macOS发行的OpenSSL库已经过时了,尽管苹果在修补方面做得相当不错,但它似乎已经过时了。我目前的macOS解决方案是Indy,并使用已经安装在Mac系统上的OpenSSL。因此,它工作得很好,但我担心这个解决方案将很快停止与许多网站的工作-如果发生这种情况,我有一个大问题,如果我没有一个替代准备。投票和奖励-尚未关闭的小希望的答案,将解决我的问题更容易。现在,我正试图弄清楚如何在Lazarus objective pascal中使用代理——当这个问题解决后,我将沿着你们描述的类似路线继续前进。已经开始工作,委托问题/时间拖了我的后腿,但我相信在某个时候会完全解决。如果块更容易,您也可以做我上面描述的事情,但使用AFNetworking类,它允许您提供一个块来处理重定向,而不是委托方法。