Kann nicht festlegen Header auf meinem WKWebView-POST-request
Möchte ich einen POST-request an meine WKWebView
aber die Header nicht gesetzt, wenn ich überwachen die Aufträge mit Charles, so schlägt die Anforderung fehl. Was ist hier falsch?
NSString *post = [NSString stringWithFormat: @"email=%@&password=%@", email, password];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *contentLength = [NSString stringWithFormat:@"%d", postData.length];
NSURL *url = [NSURL URLWithString:@"http://materik.me/endpoint"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postData];
[request setValue:contentLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[webview loadRequest:request];
Und das ist, was Charles sagt, die Anfrage ist wie:
POST /endpoint HTTP/1.1
Host: materik.me
Content-Type: application/x-www-form-urlencoded
Origin: null
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (iPhone; CPU OS 8_0 like Mac OS X)
Content-Length: 0
Accept-Language: en-us
Accept-Encoding: gzip, deflate
So, wie Sie sehen können, Content-Length
ist 0
Accept
ist nicht application/json
ist und insbesondere kein Antrag body gesendet wurden.
Vielen Dank für jede Hilfe.
InformationsquelleAutor der Frage Mattias Eriksson | 2014-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche problem mit WKWebView, dass ich beschloss, verwenden Sie anstelle von UIWebView zu vermeiden, die Pflücker crash in iOS 8. Es gibt zwei Möglichkeiten, die ich denken kann:
https://stackoverflow.com/a/10077796/4116680 (Sie müssen nur
connection:didReceiveData:
undconnectionDidFinishLoading:
von der Stellvertretung, wenn Sie nicht verwenden Sie ein selbst signiertes SSL-Zertifikat)Datei erstellen zB. "POSTRequestJS.html":
Und im code nach, wo Sie möchten, laden Sie Ihre Anfrage:
Add-Methode:
Und zuletzt fügen Sie die WKNavigationDelegate:
InformationsquelleAutor der Antwort Spas Bilyarski
Als der OP gesagt, ich habe auch bestätigt in Charles, der Körper ist 0 bytes nach
webView.load(request)
.Gibt es eine Abhilfe für dieses
WKWebView
Fehler, veranlassen wir einePOST
Anfrage mit URLSession konvertieren der Daten vom server zurückgegeben werden, umString
und statt beim laden der url, die wir verwenden loadHTMLString die:und der Inhalte ist unsere konvertiert string:
InformationsquelleAutor der Antwort OhadM
Dies scheint ein Fehler zu sein.
https://bugs.webkit.org/show_bug.cgi?id=140188
Hoffentlich wird es bald kümmern werden. In der Zwischenzeit, Rückkehr zur UIWebView oder der Umsetzung der Abhilfe vorgeschlagen von Spas Bilyarski in seiner Antwort scheint zu sein, die besten Optionen.
InformationsquelleAutor der Antwort Paul Roe
Ich diese delegate-Methode und es funktioniert !!!
InformationsquelleAutor der Antwort Harish Pathak
Kann ich das problem bestätigen.
Eine einfache Lösung für mich war eine AJAX-Anfrage mit jQuery:
wo mein Formular sieht wie
Ich hoffe das hilft jemandem...
InformationsquelleAutor der Antwort Olli D-Metz
Problemumgehung: trick durch die Verwendung von html5 & javascript.
Fügen Sie einen html5-Datei mit dem Inhalt unten, um Ihre xcode-Projekt. Zu post-Daten per javascript & h5 form:
Laden h5 Datei zu WKWebView:
Bereiten die Parameter zu posten. dh. eine Zeichenfolge & ein array von Wörterbuch
Hinweis: beim drehen array zu json-string, indem NSJSONSerialization, '\r' kann Hinzugefügt werden, automatisch. Sie müssen entfernen Sie alle '\r' in den json-string, oder die javascript nicht korrekt analysiert.
Setzen Sie diese in die WKWebView - Delegierter:
didFinishNavigation
InformationsquelleAutor der Antwort user7712661
WKWebView.load
Methode funktioniert nicht mit post-request mit post-body. Sie haben, JavaScript zu verwenden, um den trick zu tun, überprüfen SieWKWebView.evaluateJavascript
.Es ist vielleicht ein Fehler, aber Apple hat nicht angesprochen bis jetzt.
InformationsquelleAutor der Antwort Xiaodong Ma
Swift3
Ändern Sie die
baseurl
undtoken
auf Ihre Bedürfnisse.InformationsquelleAutor der Antwort neoneye