在Safari中使用sharedApplication openURL方法打开使用POST方法托pipe的Url

我有一种情况,我在使用POST方法在Safari模拟器中的Safari浏览器中托pipe一个URL。 在模拟器中启动我的iOS应用程序后,网页在safari中打开。 启动Safari我已经使用[[UIApplication sharedApplication] openURL:…

post方法如下:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://***some client url***.jsp"]]; NSString *post = [NSString stringWithFormat:@"username=%@&password=%@", userName, password]; NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; [request setHTTPMethod:@"POST"]; [request setValue:[NSString stringWithFormat:@"%d", [postData length]] forHTTPHeaderField:@"Content-Length"]; [request setHTTPBody:postData];` 

NSURLConnection * _urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; [_urlConnection开始];

这段代码在使用UIWebView时工作正常。 但是我想用这个“请求”来启动Safari,后者在POST方法中附加了用户名和密码数据。

要启动Safari,我必须调用以下代码:

 [[UIApplication sharedApplication] openURL:request]; 

但是,这显然会引发警告,因为“请求”是NSMutableURLRequesttypes的。 “语义问题:不兼容的指针types将'NSMutableURLRequest *'发送给'NSURL *'types的参数。

我甚至不能使用[[UIApplication sharedApplication] openURL:request.URL]; 因为这会给我没有附加用户名和密码的URL(不带POST方法)。

我想知道如何转换/转换此请求(NSMutableURLRequest),以便我可以在[[UIApplication sharedApplication] openURL ….

希望我对我的问题很清楚。 任何帮助将不胜感激。 提前致谢 !!

推荐的方法是在您的应用程序中使用UIWebView ,并使用NSURLRequestNSURLConnection创build发布请求。 创build发布请求并激发请求非常简单。 既然你已经知道了这一点,你不想使用这种方法,唯一的select是通过创build一个临时的HTML文件, 如上所述 。 你可以尝试一下他们正在追踪的方法,并检查它是否在你的情况下工作。

按照这个链接,你必须写一个临时的html文件。 这个html文件将有一个立即发送POST的onLoad() javascript,以及一个没有启用javascript的用户的button。 你可以创buildNSURL对象为[NSURL fileURLWithPath:path]; 从这个文件。

另一个解决scheme是从Web服务器创build一个一次性密钥 ,并通过HTTPS请求将其传递给Safari。

从浏览器中,您不能向Body中添加数据时发出POST请求。 如果它是一个URL请求,你可以在请求的头部添加身份validation作为参数,那么你可以在Safari中打开该URL。

希望我清楚。

当通过openURL方法启动safari时,您无法传递POST数据,但是如果在应用程序中使用自己的UIWebView,则可以传递POST数据,如下所示:

 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://***some client url***.jsp"]]; NSString *post = [NSString stringWithFormat:@"username=%@&password=%@", userName, password]; NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; [request setHTTPMethod:@"POST"]; [request setValue:[NSString stringWithFormat:@"%d", [postData length]] forHTTPHeaderField:@"Content-Length"]; [request setHTTPBody:postData];` [myUIWebView loadRequest:request];