NSURLRequest POST

  • Das Ganze sieht dann so ungefähr aus:

    Quellcode

    1. NSData *theData = ...;
    2. NSMutableURLRequest *theRequest = [[[NSMutableURLRequest alloc] init] autorelease];
    3. NSString *theLength = [NSString stringWithFormat:@"%d", [theData length]];
    4. NSURLResponse *theResponse = nil;
    5. [theRequest setURL:inURL];
    6. [theRequest setHTTPMethod:inMethod];
    7. [theRequest setValue:theLength forHTTPHeaderField:@"Content-Length"];
    8. [theRequest setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
    9. [theRequest setHTTPBody:theData];

    Die Variable theData enthält die Query (= Parameterliste) in UTF-8-Kodierung, wie Du sie im GET-Request angeben würdest.
    „Meine Komplikation hatte eine Komplikation.“
  • Hallo,
    wie kann ich überprüfen, ob der Post "erfolgreich" war? Also ob ich bei der Webseite angemeldet bin? (= response vom Server?!)

    Das ist mein "post" Code:

    Quellcode

    1. NSData *httpbody = [parameterString dataUsingEncoding:NSUTF8StringEncoding];
    2. NSLog(@"ParamterString: %@", parameterString);
    3. NSString *length = [NSString stringWithFormat:@"%d", [httpbody length]];
    4. NSURL *urlNew = [NSURL URLWithString:urlstring];
    5. NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:urlNew];
    6. [theRequest setHTTPMethod:@"POST"];
    7. [theRequest setValue:length forHTTPHeaderField:@"Content-Length"];
    8. [theRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    9. [theRequest setHTTPBody: httpbody];
    Alles anzeigen


    In Verbindung damit werden diese beiden Methoden aufgerufen:

    Quellcode

    1. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    2. {
    3. //NSLog(@"%@", data);
    4. [self.httpResponse appendData:data];
    5. }
    6. - (void)connectionDidFinishLoading:(NSURLConnection *)connection
    7. {
    8. NSString* responseString = [[[NSString alloc] initWithData:self.httpResponse encoding:NSUTF8StringEncoding] copy];
    9. // Do something with the response
    10. NSLog(@"Response = %@", responseString);
    11. }
    Alles anzeigen


    Leider bekomme ich als Response nichts angezeigt, also "Repsonse = ".

    Wo liegt der Hund begraben?

    Gruß :)
  • macmoonshine schrieb:

    Hast Du self.httpResponse auch initialisiert?
    Bist Du sicher, dass die Seite UTF-8 kodiert ist?


    Initialisiert? Habe httpResponse als property angelegt und synthetisiert. Das müsste doch reichen oder etwa nicht?

    Nein bin ich nicht, guter Anhaltspunkt! Wie finde ich das am Besten heraus? HTML Datei habe ich hier liegen.

    macmoonshine schrieb:

    Was soll das copy am Ende?


    War ein Versehen, hat sich wohl irgendwie eingeschlichen! War nicht beabsichtigt von mir..

    Gruß
  • Mist stimmt, muss man ja. Mein Fehler. Aber wieso? Kannst du mir das auch erklären? :)

    Es ist eine UTF-8 Datei übrigens.

    Quellcode

    1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">



    EDIT:

    Funktioniert nachdem initialisieren! :) Danke! Habe jetzt nur ne einstündige Anmeldesperre aufgrund zuvieler Login-Fehlversuche :D :D :D

    Wäre cool, wenn du mir noch kurz erklären könntest, wieso man eine synthetisierte Property auch initialiseren muss? Vermutlich wird sie durch die Property nur bekannt gemacht und durch das Synthetisieren die Getter und Setter gesetzt. Daher muss man die Variable natürlich auch noch initialisieren... ?!?

    Gruß
  • Schmarsi schrieb:

    Wäre cool, wenn du mir noch kurz erklären könntest, wieso man eine synthetisierte Property auch initialiseren muss?

    Das Synthetisieren reserviert nur den Speicher, also in der Regel die 4 oder 8 Byte, für den Zeiger. Dabei weist die Laufzeitumgebung diesem Zeiger aber kein Objekt zu. Wie soll das auch gehen? Sie kann ja nicht wissen, was Du da brauchst. Stattdessen setzt sie den Verweis auf nil.
    „Meine Komplikation hatte eine Komplikation.“