使用sharedApplication openURL方法在Safari中打开使用POST方法托管的URL。

14 浏览
0 Comments

使用sharedApplication openURL方法在Safari中打开使用POST方法托管的URL。

我有一个情况,在模拟器中使用POST方法在Safari浏览器中托管一个URL。\n在启动我的iOS应用程序之后,网页会在Safari中打开。为了启动Safari,我使用了[[UIApplication sharedApplication] openURL: ...]\nPOST方法如下所示:\n

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://***某个客户端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];

\n当使用UIWebView时,这段代码工作正常。但是我想使用带有POST方法附加的用户名和密码数据的“request”来启动Safari。\n要启动Safari,我必须调用这段代码:\n

[[UIApplication sharedApplication] openURL:request];

\n但是这显然会引发一个警告,因为“request”是NSMutableURLRequest类型。\n“语义问题:将\'incompatible pointer types sending \'NSMutableURLRequest *\' to the parameter of type \'NSURL *”...\n我甚至不能使用[[UIApplication sharedApplication] openURL:request.URL];,因为这会给我一个没有附加用户名和密码的URL(没有POST方法)。\n我想知道如何对此请求(NSMutableURLRequest)进行类型转换/转换,以便我可以将其放入[[UIApplication sharedApplication] openURL...中。\n希望我的问题非常清楚。非常感谢您的帮助!

0
0 Comments

问题的出现原因:

从浏览器中,你无法使用POST方法发送带有数据的请求。如果是一个URL请求,你可以将身份验证作为参数添加到请求的头部,然后在Safari中打开这个URL。但是openURL方法只接受一个URL作为参数,因此无法在请求中添加额外的数据。

解决方法:

无法通过openURL方法发送POST请求,就像你无法通过在浏览器的地址栏中输入来发送POST请求一样。可以尝试使用UIWebView的解决方案,或者考虑是否需要重新思考你的解决方案。

0
0 Comments

问题原因:在使用sharedApplication 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];

0
0 Comments

问题的出现原因是:推荐的方法是在应用程序中使用UIWebView,并使用NSURLRequest和NSURLConnection创建POST请求。这种方法很容易创建一个POST请求并发送请求。但如果不想使用这种方法,唯一的替代方法是创建一个临时的HTML文件来实现。

问题的解决方法有两种:

1. 创建一个临时的HTML文件,并在其中编写一个onLoad()的JavaScript函数,该函数立即发送POST请求,并为禁用JavaScript的用户提供一个按钮。可以使用[NSURL fileURLWithPath:path]方法从该文件创建NSURL对象。

2. 从Web服务器创建一个一次性密钥,并通过HTTPS请求将其传递给Safari,具体方法在这里有提到。

0