2012-11-20 47 views
2

所以,我一遍又一遍地在網上搜索有關從iPhone應用程序發送POST與XML的任何事情 - 迄今沒有運氣,沒有!如何從iOS應用程序發送POST XML?

我在我的應用程序KissXML中使用,我發現它非常容易和有用,當談到獲取XML的響應 - 但相反地發送XML到服務器... 這裏是我的方法連接和接收XML。我試圖將僅包含我的XML請求的NSString放入POST請求的主體中,但它不能按計劃工作。

-(void)prepareTransaction{ 
    NSLog(@"FXSecondVC: preparing transaction..."); 
    NSString *login = [[NSUserDefaults standardUserDefaults] stringForKey:@"kUsername"]; 
    NSString *password = [[NSUserDefaults standardUserDefaults] stringForKey:@"kPassword"]; 
    NSString *host = [[NSUserDefaults standardUserDefaults] stringForKey:@"kURLServer"]; 

    NSURL *url = [[NSURL alloc] initWithString:host]; 

    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; 
    [httpClient setAuthorizationHeaderWithUsername:login password:password]; 
    [httpClient registerHTTPOperationClass:[AFKissXMLRequestOperation class]]; 

    NSString *xmlString = @"<RootEl xmlns=\"http://some.url/goes/here\">" 
           "<Element1>12678967.543233</Element1>" 
           "<Element2>" 
            "<string xmlns=\"bla.bla/url\">" 
              "String content</string>" 
            "<string xmlns=\"bla.bla/url\">" 
              "String content</string>" 
           "</Element2>" 
           "<Element3>true</Element3>" 
           "<Element4>String content</Element4>" 
           "<Element5>1999-05-31T11:20:00</Element5>" 
           "<Element6>true</Element6>" 
          "</RootEl>"; 

    NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:kServerRequestURL parameters:nil]; 
    [request setHTTPBody:[xmlString dataUsingEncoding:NSUTF8StringEncoding]]; 

    AFKissXMLRequestOperation *operation = [AFKissXMLRequestOperation XMLDocumentRequestOperationWithRequest:request success:^(NSURLRequest *req, NSHTTPURLResponse *resp, DDXMLDocument *XMLDocument){ 
     NSLog(@"[SUCCESS]: XMLDocument: %@", XMLDocument); 
    }failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, DDXMLDocument *XMLDocument) { 
     NSLog(@"error parsing: %@", [error localizedDescription]); 
    }]; 
    [operation start]; 
} 

這是我收到的response

2012-11-21 19:40:09.884 FXApp[19662:707] FXSecondVC: preparing transaction... 
2012-11-21 19:40:10.011 FXApp[19662:707] error parsing: Expected status code in (200-299), got 400 

我失去了一些東西在這裏?我想使用KissXML,因爲它是最簡單的方法(至少我知道)在成功響應中使用已經準備好的XML文檔,但是如果解決方案需要更改框架 - 請不要猶豫。重點是讓它工作。 我擊中了死衚衕 - 這讓我瘋狂,尤其是它真的很緊急。

回答

2

神祕解決:
看來,我所要做的就是設置Content-Type for XML - 我沒有這樣做。發現的解決方案here
在這裏你去:

[request setValue:@"application/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
+0

我會接受這個答案之前等待一段時間,因爲我上,這樣的地方讀取〜setValue方法:forHTTPHeaderField'是不是最好的一段路要走。仍在工作 – raistlin

0

就我而言,我不得不用setValue:@"text/xml"來從服務器獲取(PHP服務器)所需的JSON響應。

即我用下面的:

[request addValue:@"text/xml" forHTTPHeaderField:@"Content-Type"]; 
相關問題