如何用xml正文发送alamofire请求
我在我的项目中安装了Alamofire,现在我已经做了。
我安装了邮递员 ,我把我的url和体内一个XML对象,我得到了我的结果。
这是一张我刚刚和邮递员做过的照片
我现在如何使用Alamofire或SWXMLHash发送它,因为我发送邮递员
提前致谢!
编辑
我从另一个问题尝试了这个:
Alamofire.request(.POST, "https://something.com" , parameters: Dictionary(), encoding: .Custom({ (convertible, params) in let mutableRequest = convertible.URLRequest.copy() as! NSMutableURLRequest let data = (self.testString as NSString).dataUsingEncoding(NSUTF8StringEncoding) mutableRequest.HTTPBody = data return (mutableRequest, nil) })) .responseJSON { response in print(response.response) print(response.result) } }
但它没有发送任何东西
这是日志:
可选({URL: https : //something.com } {status code:200,headers {Connection =“keep-alive”;“Content-Length”= 349;“Content-Type”=“application / xml” =“Wed,02 Nov 2016 21:13:32 GMT”; Server = nginx;“Strict-Transport-Security”=“max-age = 31536000; includeSubDomains”;}})
失败
编辑
不要忘了通过参数,如果你没有简单的添加这个参数:Dictionary()
假设您在请求中缺less有效的HTTP标头,则更新后的请求可能如下所示:
Alamofire.request(.POST, "https://something.com", parameters: Dictionary() , encoding: .Custom({ (convertible, params) in let mutableRequest = convertible.URLRequest.copy() as! NSMutableURLRequest let data = (self.testString as NSString).dataUsingEncoding(NSUTF8StringEncoding) mutableRequest.HTTPBody = data mutableRequest.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type") return (mutableRequest, nil) })) .responseJSON { response in print(response.response) print(response.result) } }
所以,基本上你应该添加一行
mutableRequest.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type")
更新 :
尝试相同,但使用responseData
或responseString
而不是responseJSON
因为您的响应可能不是JSON
用Swift 3和Alamofire 4你可以创build一个自定义的ParameterEncoding
。 与其他任何XML编码体一样,SOAP消息可以使用此参数编码,如下例所示。 其他的XML身体编码可以类似地创build(检查它所说的urlRequest.httpBody = ...
):
struct SOAPEncoding: ParameterEncoding { let service: String let action: String func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { var urlRequest = try urlRequest.asURLRequest() guard let parameters = parameters else { return urlRequest } if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { urlRequest.setValue("text/xml", forHTTPHeaderField: "Content-Type") } if urlRequest.value(forHTTPHeaderField: "SOAPACTION") == nil { urlRequest.setValue("\(service)#\(action)", forHTTPHeaderField: "SOAPACTION") } let soapArguments = parameters.map({key, value in "<\(key)>\(value)</\(key)>"}).joined(separator: "") let soapMessage = "<s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/' s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>" + "<s:Body>" + "<u:\(action) xmlns:u='\(service)'>" + soapArguments + "</u:\(action)>" + "</s:Body>" + "</s:Envelope>" urlRequest.httpBody = soapMessage.data(using: String.Encoding.utf8) return urlRequest } }
然后像这样使用它:
Alamofire.request(url, method: .post, parameters: ["parameter" : "value"], encoding: SOAPEncoding(service: "service", action: "action"))
使用Swift 3和Alamofire 4
let stringParams : String = "<msg id=\"123123\" reqTime=\"123123\">" + "<params class=\"API\">" + "<param name=\"param1\">123213</param>" + "<param name=\"param2\">1232131</param>" + "</params>" + "</msg>" let url = URL(string:"<#URL#>") var xmlRequest = URLRequest(url: url!) xmlRequest.httpBody = stringParams.data(using: String.Encoding.utf8, allowLossyConversion: true) xmlRequest.httpMethod = "POST" xmlRequest.addValue("application/xml", forHTTPHeaderField: "Content-Type") Alamofire.request(xmlRequest) .responseData { (response) in let stringResponse: String = String(data: response.data!, encoding: String.Encoding.utf8) as String! debugPrint(stringResponse) }
- 使用Alamofire参数数组上传多个文件
- 无法使用Alamofire获取数据?
- 正确使用Alamofire的URLRequestConvertible
- 通过AlamofireImage下载UIImage?
- 如何使用Alamofire 4在Swift 3中为JSON数据同时发送参数和正文的POST请求?
- Swift Alamofire发送XML请求并接收XML响应
- 错误域= NSPOSIXErrorDomain代码= 100“协议错误”
- Alamofire Image:在af_setImageWithURL()之后从AutoPurgingImageCache获取图像
- iOS:(Swift)如何显示当前位置的距离,并在注解字幕上存在注释