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

Posted

技术标签:

【中文标题】如何从 iOS 应用程序发送 POST XML?【英文标题】:How to send POST XML from iOS app? 【发布时间】:2012-11-20 00:47:07 【问题描述】:

所以,我在网上一遍又一遍地搜索有关从 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 文档成功响应的最简单方法(至少我知道),但如果解决方案需要更改框架 - 不要犹豫。首要任务是让它工作。 我走到了死胡同——这让我发疯,尤其是这件事真的很紧急。

【问题讨论】:

【参考方案1】:

谜团解开: 看来我所要做的就是为 xml 设置 Content-Type - 我没有这样做。找到解决方案here 给你:

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

【讨论】:

我会等待一段时间才能接受这个答案,因为我在某处读到 ~setValue:forHTTPHeaderField` 不是最好的方法。虽然仍在工作【参考方案2】:

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

即我使用了以下内容:

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

【讨论】:

以上是关于如何从 iOS 应用程序发送 POST XML?的主要内容,如果未能解决你的问题,请参考以下文章

将 POST 数据从 Android 应用程序发送到 PHP MySQL

如何在 Java 中发送带有 XML 数据的 HTTPS POST 请求

如何从 POSTMAN 发送包含 xml 值的 Json?

如何通过 post 将 xml 发送到 wcf 服务

在java中如何实现http/post/xml发送数据报文?麻烦高手赐教!

php如何以post形式发送xm并返回xmll数据