Wie hängen Sie Daten an eine vorhandene an POST
NSURLRequest
? Ich muss einen neuen Parameter hinzufügen userId=2323
.
82
Wie hängen Sie Daten an eine vorhandene an POST
NSURLRequest
? Ich muss einen neuen Parameter hinzufügen userId=2323
.
Antworten:
Wenn Sie keine Klassen von Drittanbietern verwenden möchten, legen Sie den Post-Body wie folgt fest ...
Hängen Sie einfach Ihr Schlüssel / Wert-Paar an die Post-Zeichenfolge an
quelle
Alle Änderungen an
NSMutableURLRequest
müssen vor dem Anruf vorgenommen werdenNSURLConnection
.Ich sehe dieses Problem, wenn ich den obigen Code kopiere und einfüge
TCPMon
und die AnforderungGET
anstelle der erwarteten ausführePOST
.quelle
Die vorherigen Beiträge zum Erstellen von
POST
Anforderungen sind weitgehend korrekt (fügen Sie die Parameter dem Textkörper und nicht der URL hinzu). Wenn jedoch die Möglichkeit besteht, dass die Eingabedaten reservierte Zeichen enthalten (z. B. Leerzeichen, kaufmännisches Und und Vorzeichen), sollten Sie diese reservierten Zeichen verarbeiten. Sie sollten nämlich der Eingabe prozentual entkommen.Wo die
precentEscapeString
Methode wie folgt definiert ist:Beachten Sie, dass es eine vielversprechende
NSString
Methode gabstringByAddingPercentEscapesUsingEncoding
(die jetzt veraltet ist), die etwas sehr Ähnliches tut, aber der Versuchung widersteht, diese zu verwenden. Es behandelt einige Zeichen (z. B. das Leerzeichen), aber nicht einige der anderen (z. B.+
oder&
Zeichen).Das zeitgenössische Äquivalent ist
stringByAddingPercentEncodingWithAllowedCharacters
, aber auch hier nicht versucht zu seinURLQueryAllowedCharacterSet
, da dies auch erlaubt+
und&
ungehindert passieren kann. Diese beiden Zeichen sind in der umfassenderen "Abfrage" zulässig. Wenn diese Zeichen jedoch in einem Wert in einer Abfrage enthalten sind, müssen sie maskiert werden. Technisch können Sie entweder verwendenURLQueryAllowedCharacterSet
einen veränderlichen Zeichensatz erstellen und einige der darin enthaltenen Zeichen entfernen oder Ihren eigenen Zeichensatz von Grund auf neu erstellen.Zum Beispiel, wenn Sie bei Alamofire der aussehen Parametercodierung , nehmen sie
URLQueryAllowedCharacterSet
und entfernengeneralDelimitersToEncode
(die die Zeichen enthält#
,[
,]
, und@
, aber wegen eines historischen Fehler in einigen alten Web - Server, weder?
noch/
) undsubDelimitersToEncode
(dh!
,$
,&
,'
,(
,)
,*
,+
,,
,;
, und=
). Dies ist eine korrekte Implementierung (obwohl Sie über das Entfernen von?
und diskutieren könnten/
), obwohl sie ziemlich kompliziert ist. VielleichtCFURLCreateStringByAddingPercentEscapes
ist direkter / effizienter.quelle
stringByAddingPercentEscapesUsingEncoding:
,stringByAddingPercentEncodingWithAllowedCharacters:
funktioniert aber gut mit jedem Charakter. Beispiel:URLString = [URLString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
stringByAddingPercentEncodingWithAllowedCharacters
, aber Sie können nicht verwendenURLQueryAllowedCharacterSet
, da dies+
und&
(diese sind zulässige Zeichen in der breiteren Abfrage, aber wenn diese Zeichen in einem Wert innerhalb einer Abfrage erscheinen, müssen sie maskiert werden, was dieser Zeichensatz nicht tut ). Sie können also entwederURLQueryAllowedCharacterSet
einen veränderlichen Zeichensatz erstellen und einige der darin enthaltenen Zeichen entfernen oder Ihren eigenen Zeichensatz von Grund auf neu erstellen. Oder verwendenCFURLCreateStringByAddingPercentEscapes
.CFURLCreateStringByAddingPercentEscapes
jetzt veraltet ist, sollten Sie den entsprechenden Zeichensatz wirklich selbst erstellen. Siehe stackoverflow.com/a/54742187/1271826 .quelle
Der obige Beispielcode war für mich sehr hilfreich, aber (wie oben angedeutet), ich denke, Sie müssen ihn
NSMutableURLRequest
eher verwenden alsNSURLRequest
. In der aktuellen Form konnte ich es nicht dazu bringen, auf densetHTTPMethod
Anruf zu antworten . Durch Ändern des Typs wurden die Probleme behoben.quelle
Jeder, der nach einer schnellen Lösung sucht
quelle