阅读大量答案,但没有找到简单的答案: 如何通过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
可能这是问题,但我不确切知道。 使用带curl的php - 从API获得正确的答案。
有人能用这个XML请求和URL显示工作示例吗?
答案 0 :(得分: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。
答案 1 :(得分:0)
在client
上,请务必设置要使用的请求操作类型:
[client registerHTTPOperationClass:[AFXMLRequestOperation class]];