2009-07-17 9 views

Répondre

105

Créer POST URLRequest et l'utiliser pour remplir 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]; 
+0

Testé et cela fonctionne, merci! –

+0

fonctionne bien. Salutations –

+7

Je pense que le 'request' devrait être libéré à la fin. :) – Kjuly

7

La réponse de oxigène, a travaillé avec un changement mineur. Lorsque vous utilisez:

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

Il n'a pas fonctionné, ni comme GET ou requêtes POST, lorsqu'il est ajouté une barre oblique se terminant à la Theurl cela a fonctionné.

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

C'est très étrange ... Je suis sûr que j'ai testé cela en mai 2012 et cela a fonctionné sans le /. Mais il a certainement besoin de/now, ou le POST est mystérieusement transformé en GET. Merci! – emrys57

9

Pour Swift

Ci-dessous un exemple pour l'appel POST pour une vue web avec le type de contenu 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) 

Vous devez modifier postData pour les autres types de contenu.

1

C'est de modifier la réponse de @ 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) 
0

pour swift 4

d'abord son mieux d'utiliser cette extension:

extension URL{ 
    func withQueries(_ queries:[String:String]) -> URL? { 
     var components = URLComponents(url: self, resolvingAgainstBaseURL: true) 
     components?.queryItems = queries.flatMap{URLQueryItem(name: $0.0, value: $0.1)} 
     return components?.url 
    } 

    func justQueries(_ queries:[String:String]) -> URL? { 
     var components = URLComponents(url: self, resolvingAgainstBaseURL: true) 
     components?.queryItems = queries.flatMap{URLQueryItem(name: $0.0, value: $0.1)} 
     return components?.url 
    } 

} 

cette extension est très utile pour gérer les paramètres et ses valeurs. seconde:

let urlstring = "https://yourdomain.com" 
     let url = URL(string: urlstring)! 
     let request = NSMutableURLRequest(url: url as URL) 
     request.httpMethod = "POST" 
     request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
     let query :[String:String] = ["username":"admin","password":"111"] 
     let baseurl = URL(string:urlstring)! 
     let postString = (baseurl.withQueries(query)!).query 
     request.httpBody = postString?.data(using: .utf8) 
     webview.load(request as URLRequest) 
Questions connexes