如何从iOS应用程序发送POST XML?

时间:2012-11-20 00:47:07

标签: iphone ios xml post kissxml

所以,我一遍遍地在网上搜索从iPhone应用程序发送带有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 个答案:

答案 0 :(得分:2)

神秘解决了:
似乎我所要做的就是为xml设置Content-Type - 我没有这样做。找到解决方案here
你走了:

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

答案 1 :(得分:0)

就我而言,我必须使用setValue:@"text/xml"从服务器(PHP服务器)获取所需的JSON响应。

即。我使用了以下内容:

[request addValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];