Подтвердить что ты не робот

Загрузка веб-страницы через UIWebView с параметрами POST

Можно ли загрузить страницу через UIWebView с параметрами POST? Возможно, я могу просто загрузить встроенную форму с параметрами и заполнить их с помощью javascript и заставить отправить, но есть ли более чистый и быстрый способ?

Спасибо!

4b9b3361

Ответ 1

Создайте POST URLRequest и используйте его для заполнения webView

NSURL *url = [NSURL URLWithString: @"http://your_url.com"];
NSString *body = [NSString stringWithFormat: @"arg1=%@&arg2=%@", @"val1",@"val2"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL: url];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: [body dataUsingEncoding: NSUTF8StringEncoding]];
[webView loadRequest: request];

Ответ 2

Для Swift

Ниже приведен пример вызова POST для веб-представления с типом контента x-www-form-urlencoded.

let url = NSURL (string: "https://www.google.com")
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")

let post: String = "sourceId=44574fdsf01e-e4da-4e8c-a897-17722d00e1fe&sourceType=abc"
let postData: NSData = post.dataUsingEncoding(NSASCIIStringEncoding, allowLossyConversion: true)!

request.HTTPBody = postData
webView.loadRequest(request)

Вам нужно изменить postData для других типов контента.

Ответ 3

Ответ от оксигена работал с незначительным изменением. При использовании:

NSString *theURL = @"http://your_url.com/sub";
...//and later
[request setURL:[NSURL URLWithString:theURL]];

Это не сработало, как запросы GET или POST, при добавлении конечной косой черты к theURL. Она работала.

NSString *theURL = @"http://your_url.com/sub/";

Ответ 4

Это изменение ответа @2ank3th для Swift 3:

let url = NSURL (string: "https://www.google.com")
let request = NSMutableURLRequest(url: url! as URL)
request.httpMethod = "POST"
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")

let post: String = "sourceId=44574fdsf01e-e4da-4e8c-a897-17722d00e1fe&sourceType=abc"
let postData: NSData = post.data(using: String.Encoding.ascii, allowLossyConversion: true)! as NSData

request.httpBody = postData as Data
webView.loadRequest(request as URLRequest)