我是初学者,我真的被卡住了。我想通过向提到的URL发送POST请求来上传产品,其中包含自动生成的客户端ID和作为参数发送的产品JSON。此外,我还要求此请求中的cookie。我发现使用Alamofire非常难以实现,因此同样欢迎NSURLConnection解决方案。请帮忙。提前谢谢!
HTTP POST Request URL: http://blahblah.com/api/v1/products/saveDraft
HTTP Request Headers:
version: 0.1.7
Cookie: client=iOS; version=0.1.7; sellerId=SEL5483318784; key=178a0506-0639-4659-9495-67e5dffa42de
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 1431
HTTP URL parameters: clientId=1444657827384-344b7992-8608-49b1-976a-f405defa189&[PRODUCTJSON]
我试图执行的Alamofire请求如下。请求失败,错误请求错误(状态代码400)
let cookies = "client=iOS; version=" + version + "; sellerId=" + sellerId + "; key=" + sellerKey
let manager = Manager.sharedInstance
manager.session.configuration.HTTPAdditionalHeaders = [
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Cookie": cookies
]
Alamofire.request(.POST, ServerConfig.ADD_PRODUCT_URL, parameters: productJSON, encoding: .JSON, headers: nil)
.responseJSON(completionHandler: { responseRequest, responseResponse, responseResult in
print(responseRequest!.URL)
print(responseResponse)
print(responseResult)
})
请注意,Product Json不包含客户端ID。我仍然需要找到一种方法将它们作为参数包含在HTTP POST请求中。
答案 0 :(得分:0)
这就是我发布帖子请求的方式:
let request = NSMutableURLRequest(URL: NSURL(string: "http://blahblah.com/api/v1/products/saveDraft")!)
request.HTTPMethod = "POST"
var postString: String?
postString = "client=iOS; version=" + version + "; sellerId=" + sellerId + "; key=" + sellerKey
request.HTTPBody = postString!.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
print("error=\(error)")
print("ERROR")
}
//DO something
答案 1 :(得分:0)
@ godlike的答案很好,但是你需要用&符号分隔postString参数而不是分号:
postString = "client=iOS&version=" + version + "&sellerId=" + sellerId + "&key=" + sellerKey
这对我有用。
此外,根据输入的来源,您可能需要考虑对变量进行编码以转义特殊字符。如果它们来自用户的输入,您可以执行以下操作:
let encodedUserMessage = userMessage.addingPercentEncoding(withAllowedCharacters: .alphanumerics)
我会对@ godlike的回答发表评论,但我没有足够的声誉。希望这可以帮助其他人,因为我花了很多时间试图找出如何传递多个参数。