我有一种情况,我使用POST方法在模拟器中的safari浏览器中托管网址。 在模拟器中启动我的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 start];
这段代码在使用UIWebView时工作正常。但我想使用此“请求”启动Safari,该请求附加了用户名& POST方法的密码数据。
要启动Safari,我必须调用此代码:
[[UIApplication sharedApplication] openURL:request];
但是这显然会引发警告,因为“request”属于NSMutableURLRequest类型。 “语义问题:不兼容的指针类型将'NSMutableURLRequest *'发送到'NSURL *'类型的参数..
我甚至无法使用[[UIApplication sharedApplication] openURL:request.URL];
,因为这会给我一个未附加用户名和附加信息的网址。密码(没有POST方法)。
我想知道如何对此请求进行类型转换/转换(NSMutableURLRequest),以便我可以在[[UIApplication sharedApplication] openURL ....
中容纳它。希望我对我的问题非常清楚。任何帮助将受到高度赞赏。在此先感谢!!
答案 0 :(得分:5)
建议的方法是在您的应用中使用UIWebView
,并使用NSURLRequest
和NSURLConnection
创建发布请求。创建一个post请求并触发请求非常容易。既然你已经想出了这个并且你不想使用这种方法,那么只有通过创建一个临时html文件mentioned here 来替代。您可以尝试使用他们遵循的方法,并检查它是否适用于您的情况。
根据该链接,您必须编写一个临时的html文件。这个html文件将有一个onLoad()
javascript立即发送POST,并为没有启用javascript的用户提供一个按钮。您可以从此文件中将NSURL
对象创建为[NSURL fileURLWithPath:path];
。
另一种解决方案是从网络服务器创建one time key并通过HTTPS请求as mentioned here将其传递给safari。
答案 1 :(得分:2)
从浏览器中,您无法在向Body中添加数据时发出POST请求。如果是URL请求,您可以在其中添加身份验证作为请求标头中的参数,您可以在Safari中打开该URL。
希望我很清楚。
答案 2 :(得分:2)
通过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];