Benutzerdefinierte Suche

Geschickt HTTP-Post senden

  1. Chakotay1308

    Chakotay1308 Thread StarterMacUser Mitglied

    Mitglied seit:
    19.05.2005
    Beiträge:
    196
    Zustimmungen:
    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
     
    Chakotay1308, 28.12.2005
  2. below

    belowMacUser Mitglied

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

    Gruss

    Alex
     
    below, 28.12.2005
  3. Chakotay1308

    Chakotay1308 Thread StarterMacUser Mitglied

    Mitglied seit:
    19.05.2005
    Beiträge:
    196
    Zustimmungen:
    19
    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
     
    Chakotay1308, 28.12.2005
  4. below

    belowMacUser Mitglied

    Mitglied seit:
    15.03.2004
    Beiträge:
    13.289
    Zustimmungen:
    1.086
    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, 28.12.2005
  5. Chakotay1308

    Chakotay1308 Thread StarterMacUser Mitglied

    Mitglied seit:
    19.05.2005
    Beiträge:
    196
    Zustimmungen:
    19
    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
     
    Chakotay1308, 28.12.2005
  6. Chakotay1308

    Chakotay1308 Thread StarterMacUser Mitglied

    Mitglied seit:
    19.05.2005
    Beiträge:
    196
    Zustimmungen:
    19
    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
     
    Chakotay1308, 28.12.2005
  7. below

    belowMacUser Mitglied

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

    Gruss

    Alex
     
    below, 28.12.2005
  8. Chakotay1308

    Chakotay1308 Thread StarterMacUser Mitglied

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

    Chris
     
    Chakotay1308, 29.12.2005