1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Cocoa: POST Anfrage

Dieses Thema im Forum "OS X-Developer" wurde erstellt von keman, 06.04.07.

  1. keman

    keman Gast

    Hallo

    Wie kann man in Cocoa bzw. Objective-C einer Webseite eine Post-Anfrage versenden? Hab's mit dem Beispiel aus dem Developer ("POST Example") probiert, jedoch hat's dort nicht ganz geklappt.
    Ist jenes Beispiel falsch oder musst man eine bestimmte Syntax oder so beachten?
    Das Feld "URL" mit einer URL und das Feld "POST data" mit value=hallo auszufüllen hat nicht geklappt, obwohl die angegebene URL auch tatsächlich nach value fragt ($value = $_POST['value']; echo $value ist dort enthalten)...

    mfg
    keman
     
  2. Bölzebub

    Bölzebub Querina

    Dabei seit:
    27.05.05
    Beiträge:
    180
    Du brauchst erst mal einen NSMutableURLRequest. Dem sagst du dann, dass er als HTTP-Methode POST verwenden soll.

    Code:
    request = [[NSMutableURLRequest alloc] initWithURL:url];
    [request setHTTPMethod:@"POST"];
    Dann brauchst du noch einen String, der alle Parameter enthält. Den setzt du dann als HTTP-Body des Requests.

    Code:
    NSString *bodyString = @"value=hallo&foo=bar";
    [request setHTTPBody:[bodyString dataUsingEncoding:NSUTF8StringEncoding]];
    Evtl. brauchst du noch eine stringByAddingPercentEscapesUsingEncoding: für den Body-String und wenn der Server es haben will musst du "Content-Type" und "Content-Length" im Header noch setzen. Danach den Request ganz normal per NSURLConnection ausführen.

    Nachtrag: Steht übrigens auch bei CocoaDev.
     
    #2 Bölzebub, 06.04.07
    Zuletzt bearbeitet: 06.04.07
    Peter Maurer gefällt das.
  3. keman

    keman Gast

    Das klappt irgendwie nicht. :(

    Die Antwort des Servers sieht immer so aus, als hätte er keine POST Daten eingelesen.

    Code:
    NSString* content = @"value=hallo";
    NSURL *webServiceURL = [NSURL URLWithString:[url_field stringValue]];
    
    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:webServiceURL];
    [urlRequest setHTTPMethod:@"POST"];
    [urlRequest setValue:@"text/xml" forHTTPHeaderField:@"Content-type"];
    [urlRequest setHTTPBody:[content dataUsingEncoding:NSASCIIStringEncoding]];
    
    NSURLConnection* connectionResponse = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
     
  4. Bölzebub

    Bölzebub Querina

    Dabei seit:
    27.05.05
    Beiträge:
    180
    Content-Type sollte wahrscheinlich eher "application/x-www-form-urlencoded" sein. Kann sein, dass das sonst nicht in $_POST landet. (Reine Spekulation, meine PHP-Kenntnisse halten sich in Grenzen.) Wenn das nicht hilft, versuch mal zusätzlich noch ein
    Code:
    [urlRequest addValue:[NSString stringWithFormat:@"%d", [bodyString lengthOfBytesUsingEncoding:NSUTF8StringEncoding]] forHTTPHeaderField:@"Content-Length"];
     
  5. keman

    keman Gast

    Wow mit "application/x-www-form-urlencoded" hat's geklappt! :)

    Danke! :)
     

Diese Seite empfehlen