Geschickt HTTP-Post senden

C

Chakotay1308

Aktives Mitglied
Thread Starter
Dabei seit
19.05.2005
Beiträge
209
Reaktionspunkte
19
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
 
Was ist denn Dein Vorwissen, kannst Du etwas ObjC/Cocoa?

Gruss

Alex
 
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
 
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
 
below schrieb:
Sonst empfehle ich erstmal Objective-C lernen. Es nützt Dir ja sonst wenig, wenn ich Dir hier was vom NSMutableURLRequest erzähle
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
 
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
 
Alternativ kannst Du unter Tiger natürlich auch das schicke NSXMLDocument zum erstellen des Bodies nehmen.

Gruss

Alex
 
Hi below,
stimmt. NSXML ist mir vorhin zur Auswertung unter die Augen gekommen. Aber jetzt wo du das sagst... Gute Idee. Danke! :)

Chris
 
Zurück
Oben Unten