在iPhone上进行隧道化网络请求

3

我想知道是否有可能对Web请求进行隧道传输,当然要知道使用/实现什么。

我已经编写了NSInputStreamNSOutputStream的子类,通过我的自定义代理服务器发送和接收数据,在套接字连接方面运作得非常好。

我尝试实现UIWebViewNSURLRequest的委托,但无法捕获UIWebView发出的所有HTTP请求。

先感谢您的帮助。


我们需要更多关于您所尝试实现的内容的细节。系统范围内的HTTP(S)/SOCKS代理支持不能满足您的需求吗? - Aidan Steele
我正在使用一个自定义代理服务器,该服务器使用RSA加密进行密钥交换,然后使用AES加密来传输数据,因此对于我来说,SOCKS代理是不可行的。实际上,我只是想将Java代码移植到iPhone上,但现在我卡在了与HTTP相关连接的隧道设置上。 - Pada
1个回答

0
你可以尝试使用类别来捕获所有相关的方法调用(如下模板)。但是要小心龙并确保在执行此操作之前考虑使用系统代理路线。

UIWebView+PrivateProxy.h

@interface UIWebView (PrivateProxy) 
       - (void)loadRequest:(NSURLRequest *)request;

@end

UIWebView+PrivateProxy.m

@implementation UIWebView (PrivateProxy) 
   - (void)loadRequest:(NSURLRequest *)request {
       if(request.something ....) {
          // handle yourself ...
       } else { 
          [super loadRequest:request]; // use stanadrd implementation
       }
   }
@end

当然,您可能还需要覆盖更多的方法,例如reload、stopLoading等。


谢谢,玛丽亚。我在我的第一篇帖子中留了一个评论,解释了为什么我不想使用标准的SOCKS代理。我已经尝试创建了一个UIWebView子类,并实现了loadRequest方法,但它只被触发了一次。我不确定是否应该尝试使用方法Swizzling,因为你不能使用分类过的UIWebView类调用[super loadRequest:request],因为UIView是其父视图,它没有loadRequest函数。 你认为使用方法Swizzling是否可以解决我的问题,即loadRequest仅对www.google.com等网站被调用一次,包括其中的图片。 - Pada
请注意,我的答案并没有对UIWebView进行子类化。它使用类别来扩展现有的类行为-因此具有系统范围的影响。有关类别的更多信息,请参见http://macdevelopertips.com/objective-c/objective-c-categories.html。 - Maria Zverina
1
啊啊啊..我终于明白这个问题了。这个对你有用吗?http://www.icab.de/blog/2009/08/18/url-filtering-with-uiwebview-on-the-iphone/ - Maria Zverina

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接