我已经看过答案如何调用Web服务通过SOAP形式迅速在互联网上,并找到了一些答案.我试图实现代码,我已经在这些答案中找到,但不断得到一个HTTP 400状态码.我试图找出我们我做错了什么.
我已经将问题归结为视图控制器中的几行代码,如下图所示,当按下UI上的按钮时会调用代码。我试图调用的Web服务可以在http://www.cgsapi.com/CGSWebService.asmx中找到。
(To查看WSDL文件,将?wsdl追加到URL的末尾。)
import UIKit
class ViewController: UIViewController {
var is_SoapMessage: String = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:cgs=\"http://www.cgsapi.com/\"><soapenv:Header/><soapenv:Body><cgs:GetSystemStatus/></soapenv:Body></soapenv:Envelope>"
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func btnClicked(sender: AnyObject)
{
var is_URL: String = "http://www.cgsapi.com/CGSWebService.asmx"
var lobj_Request = NSMutableURLRequest(URL: NSURL(string: is_URL)!)
var session = NSURLSession.sharedSession()
var err: NSError?
lobj_Request.HTTPMethod = "POST"
lobj_Request.addValue("www.cgsapi.com", forHTTPHeaderField: "Host")
lobj_Request.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
//lobj_Request.addValue(String(count(is_SoapMessage)), forHTTPHeaderField: "Content-Length")
lobj_Request.addValue("223", forHTTPHeaderField: "Content-Length")
lobj_Request.addValue("http://www.cgsapi.com/GetSystemStatus", forHTTPHeaderField: "SOAPAction")
var task = session.dataTaskWithRequest(lobj_Request, completionHandler: {data, response, error -> Void in
println("Response: \(response)")
var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Body: \(strData)")
if error != nil
{
println("Error: " + error.description)
}
})
task.resume()
}
}
你知道为什么当我调用这个函数时会得到http 400状态吗?
6条答案
按热度按时间ncecgwcz1#
所以我是愚蠢的。主要的事情是我错过了设置消息的主体到SOAP请求。我的更新更正代码如下:
yk9xbfzb2#
Swift 5.2,XCode 12
我或多或少遵循了乔治在自我回复中所做的方法。我认为留下一个最新的Swift和Xcode代码样本可能对一些人有帮助:
在
ProvidedData
中,我假设你会以某种方式传递你的url和信封。除此之外,如果你想拥有一个更结构化和“基于参数”的信封,并且你不介意使用外部库,@Pulkit Kumar Singh提出的
AEXML
解决方案也很有趣。rqenqsqc3#
参考这个链接https://github.com/blastar/Swift-SOAP-with-Alamofire。它给你一个更结构化的方法来处理肥皂与Almofire。
1.使用可可pod可以导入以下pod
https://cocoapods.org/了解如何设置可可荚
2.这只是通过almofire实现soap的一种方法,almofire更有结构化。你必须根据你的实现做一些小的任务来定制
希望能帮上忙。
b1zrtrql4#
您可以使用下面的代码来进行Web服务调用。
o4tp2gmn5#
gkn4icbw6#