9

シミュレーターのサファリブラウザーで POST メソッドを使用して URL をホストしている状況があります。シミュレーターで iOS アプリを起動すると、Safari で Web ページが開きます。サファリを起動するには、[[UIApplication sharedApplication] openURL: ... を使用しました。

投稿方法は以下の通りです。

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 を使用すると、このコードは正常に動作します。しかし、POST メソッドからユーザー名とパスワードのデータを追加したこの「リクエスト」を使用して Safari を起動したいと考えています。

Safari を起動するには、次のコードを呼び出す必要があります。

[[UIApplication sharedApplication] openURL:request];

ただし、「リクエスト」のタイプが NSMutableURLRequest であるため、これは明らかに警告をスローします。「セマンティックな問題: 互換性のないポインター タイプが 'NSMutableURLRequest *' をタイプ 'NSURL * のパラメーターに送信している」...

[[UIApplication sharedApplication] openURL:request.URL];これにより、ユーザー名とパスワードが追加されていないURLが得られるため(POSTメソッドなしで)、使用することさえできません。

このリクエスト (NSMutableURLRequest) をタイプキャスト/変換して [[UIApplication sharedApplication] openURL...

私の質問がはっきりしていることを願っています。どんな助けでも大歓迎です。前もって感謝します !!

4

3 に答える 3

5

推奨されるアプローチは、アプリケーションで を使用し、 と を使用しUIWebViewてポスト リクエストを作成することです。投稿リクエストを作成してリクエストを開始するのは非常に簡単です。あなたはすでにこれを理解しており、このアプローチを使用したくないので、唯一の代替手段はここで述べたように一時的なhtmlファイルを作成することです. 彼らが従っているアプローチを試して、それがあなたのケースで機能しているかどうかを確認できます。NSURLRequestNSURLConnection

そのリンクに従って、一時的なhtmlファイルを作成する必要があります。この html ファイルにはonLoad()、POST をすぐに送信する JavaScript と、JavaScript が有効になっていないユーザー用のボタンがあります。このファイルからNSURLオブジェクトを作成できます。[NSURL fileURLWithPath:path];

もう 1 つの解決策は、Web サーバーからワンタイム キーを作成し、ここで説明したようにHTTPS リクエストを介して safari に渡すことです。

于 2012-11-11T10:36:50.687 に答える
3

openURL メソッドを介してサファリを起動するときに 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];
于 2012-11-08T22:11:45.973 に答える
2

ブラウザから、Bodyにデータを追加しているときにPOSTリクエストを行うことはできません。リクエストのヘッダーにパラメータとして認証を追加できるURLリクエストの場合、そのURLはサファリで開くことができます。

私がはっきりしていることを願っています。

于 2012-11-02T13:40:29.560 に答える