2009-07-17 7 views

Odpowiedz

105

Tworzenie POST URLRequest i użyć go, aby wypełnić 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

Testowany i działa, dzięki! –

+0

działa dobrze. Pozdrawiam –

+7

Myślę, że 'prośba' powinna zostać wydana na końcu. :) – Kjuly

7

Odpowiedź z oxigen pracował z niewielką zmianą. Podczas korzystania:

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

To nie działa, ani jako GET lub POST żądań, gdy dodał końcowy ukośnik do theURL to działało.

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

To jest bardzo dziwne ... Jestem pewien, że testowałem to w maju 2012 i działało bez /. Ale na pewno potrzebuje/teraz, lub POST jest w tajemniczy sposób przekształcony w GET. Dzięki! – emrys57

9

Swift

Poniżej podano przykład dla połączenia POST widoku sieci Web z typ zawartości x WWW postać 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) 

Musisz zmienić postData dla innych typów zawartości.

1

To modyfikować odpowiedź @ 2ank3th dla 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

do szybkiego 4

pierwszym jej lepiej używać tego rozszerzenia:

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 
    } 

} 

to rozszerzenie jest bardzo przydatna uchwyty parametrów i ich wartości. sekunda:

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)