Geschickt HTTP-Post senden

Diskutiere mit über: Geschickt HTTP-Post senden im Mac OS X Entwickler, Programmierer Forum

  1. Chakotay1308

    Chakotay1308 Thread Starter MacUser Mitglied

    Beiträge:
    195
    Zustimmungen:
    19
    Registriert seit:
    19.05.2005
    Hi,
    ich versuche gerade HTTP-Anfragen an eine PHP-Datei auf meinem Webserver zu senden (genauer gesagt versuche ich meinen WordPress-Blog via XML-RPC zu steuern).

    Ich habe jetzt mal geguckt, was NSConnection macht, aber das hat bisher zu keinem zufriedenstellenden Ergebnis geführt.
    Wie kann man das denn am geschicksten machen, was ich vorhabe (mit Cocoa in Obj-C)?

    Bin für jeden Tipp dankbar,
    Chris
     
  2. below

    below MacUser Mitglied

    Beiträge:
    13.882
    Zustimmungen:
    1.086
    Registriert seit:
    15.03.2004
    Was ist denn Dein Vorwissen, kannst Du etwas ObjC/Cocoa?

    Gruss

    Alex
     
  3. Chakotay1308

    Chakotay1308 Thread Starter MacUser Mitglied

    Beiträge:
    195
    Zustimmungen:
    19
    Registriert seit:
    19.05.2005
    Hi below,
    sagen wir so... mein Wissen/Können was Obj-C betrifft ist relativ gering, da ich gestern erst angefangen habe richtig darüber nachzudenken. ;) Die Grundlagen der Syntax sollten aber keineswegs das Problem sein. Außerdem kann ich grundsätzlich immer was dazu lernen und letztenendes habe ich auch Erfahrung in anderen Programmiersprachen (u.a. C++). ;)
    Aber ansonsten ist das Vorwissen rel. gering. ;)

    Chris
     
  4. below

    below MacUser Mitglied

    Beiträge:
    13.882
    Zustimmungen:
    1.086
    Registriert seit:
    15.03.2004
    OK, Du kannst einen Post auch per Telnet schicken.

    Sonst empfehle ich erstmal Objective-C lernen. Es nützt Dir ja sonst wenig, wenn ich Dir hier was vom NSMutableURLRequest erzähle

    Gruss

    Alex
     
  5. Chakotay1308

    Chakotay1308 Thread Starter MacUser Mitglied

    Beiträge:
    195
    Zustimmungen:
    19
    Registriert seit:
    19.05.2005
    Gut... was heißt lernen? Wenn du damit meinst, was Obj-C ist und wie man Klassen definiert und implementiert, dann habe ich das gestern gemacht. ;)

    Und ansonsten war das Stichwort schon ein guter Ansatz. Die Klasse scheint in etwa das zu machen, was ich vorhabe. ;)

    Danke,
    Chris
     
  6. Chakotay1308

    Chakotay1308 Thread Starter MacUser Mitglied

    Beiträge:
    195
    Zustimmungen:
    19
    Registriert seit:
    19.05.2005
    Ich habe mich nochmal in die unendlichen Tiefen des Netzes begeben (und tatsälich musste ich sehr tief graben; ich muss leider sagen, dass scheinbar nicht viele Leute ihr Cocoa-Wissen verbreiten können/wollen ;)) und endlich es geschafft. :)

    Für jeden, der die Lösung interessiert:
    Code:
    	// create the request
    	NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://****.xxxxxxxx.***/***.php"]
    											cachePolicy:NSURLRequestUseProtocolCachePolicy
    											timeoutInterval:60.0];
    	NSLog(@"Request created to %@", [theRequest URL]);
    	
    	// generate the header and the post-data
    	NSString *xmlRequest = @"<?xml version=\"1.0\"?><methodCall><methodName>metaWeblog.getRecentPosts</methodName><params><param><value><i4>0</i4></value></param><param><value><string>admin</string></value></param><param><value><string>....</string></value></param><param><value><i4>1</i4></value></param></params></methodCall>";
    	const char *utfXmlRequest = [xmlRequest UTF8String];
    	NSData *bodyData = [NSData dataWithBytes:utfXmlRequest length:strlen(utfXmlRequest)];
    
    	[theRequest setValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
    	[theRequest setValue:@"WPP v0.1" forHTTPHeaderField:@"User-Agent"];
    	[theRequest setValue:@"UTF-8" forHTTPHeaderField:@"Content-Type"];
    	[theRequest setValue:[NSString stringWithFormat:@"%d",[bodyData length]] forHTTPHeaderField:@"Content-Length"];
    	[theRequest setHTTPMethod:@"POST"];
    	[theRequest setHTTPBody:bodyData];
    
    	theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
    	if (theConnection) {
    		// store received data
    		receivedData = [[NSMutableData data] retain];
    		// log that data is stored
    		NSLog(@"The downloaded data has been stored.");
    	}
    	else {
    		// something has gone wrong!
    		NSLog(@"Downloading data from server failed!");
    	}
    Man muss danach jedoch noch auf die Messages reagieren, die man vom Server bzw. von der entsprechenden Klasse erhält. Ein gutes Dokument, das ich dazu gefunden habe gibt es unter: http://developer.apple.com/documentation/Cocoa/Conceptual/URLLoadingSystem/index.html

    So far,
    Chris
     
  7. below

    below MacUser Mitglied

    Beiträge:
    13.882
    Zustimmungen:
    1.086
    Registriert seit:
    15.03.2004
    Alternativ kannst Du unter Tiger natürlich auch das schicke NSXMLDocument zum erstellen des Bodies nehmen.

    Gruss

    Alex
     
  8. Chakotay1308

    Chakotay1308 Thread Starter MacUser Mitglied

    Beiträge:
    195
    Zustimmungen:
    19
    Registriert seit:
    19.05.2005
    Hi below,
    stimmt. NSXML ist mir vorhin zur Auswertung unter die Augen gekommen. Aber jetzt wo du das sagst... Gute Idee. Danke! :)

    Chris
     

Diese Seite empfehlen

Benutzerdefinierte Suche