0

阅读大量答案并没有找到简单的答案:如何通过 POST 和使用 AFNetworking 将简单的 XML 发送到 URL?

<?xml version=’1.0’ encoding=’UTF-­‐8’?>
<data>
<login>LOGIN</login>
<password>PASSWORD</password>
</data>

网址例如:http ://example.com/API/balance.php

当我使用:

NSDictionary *params = @{@"login":@"login",@"password":@"password"};
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];
[client setDefaultHeader:@"Content-Type" value:@"application/xml"];
[client postPath:@"balance.php" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
... some code ...
}failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error retrieving data: %@", error);
}];

我总是从 API 获取带有错误的 XML:第 1 行中的错误不是格式正确(无效令牌)

当我使用 HTTP 嗅探器时,我看到 Content-Type:application/x-www-form-urlencoded; 字符集=utf-8

可能是这个问题,但我不知道。将 php 与 curl 一起使用 - 从 API 获得正确答案。

任何人都可以展示这个 XML 请求和 URL 的工作示例吗?

4

2 回答 2

3

那是因为默认[AFHTTPClient parameterEncoding]AFFormURLParameterEncoding. 不幸的是,没有这样的编码AFXMLParameterEncoding,所以我会手动创建 XML 并将其设置在NSMutableURLRequest

AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];
[client setDefaultHeader:@"Content-Type" value:@"application/xml"];

NSString *xml = [NSString stringWithFormat:@"<?xml version=’1.0’ encoding='UTF-­‐8'?><data><login>%@</login><password>%@</password></data>", user, password];
NSMutableURLRequest *req = [self requestWithMethod:@"POST" path:@"autenticacao" parameters:nil];
req.HTTPBody = [xml dataUsingEncoding:NSUTF8StringEncoding];

AFKissXMLRequestOperation *op = [AFKissXMLRequestOperation XMLDocumentRequestOperationWithRequest:req success:^(NSURLRequest *request, NSHTTPURLResponse *response, DDXMLDocument *XMLDocument) {

    NSLog(@"%@", XMLDocument);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, DDXMLDocument *XMLDocument) {
    NSLog(@"%@", error);
}];
[client enqueueHTTPRequestOperation:op];

我还在使用AFKissXMLRequestOperation,这是一个扩展AFNetworking,可以更轻松地解析响应中的 XML。

于 2013-06-23T17:20:16.333 回答
0

在您的client上,请务必设置要使用的请求操作的类型:

[client registerHTTPOperationClass:[AFXMLRequestOperation class]];
于 2013-06-23T16:57:32.430 回答