为什么http post请求正文始终由Swift应用程序中的Optional文本包装

时间:2015-01-26 11:38:13

标签: swift nsstring nsurlrequest

我正在编写swift代码来向php服务器发送http post请求。但我的php脚本总是得到奇怪的帖子体,因为参数是由Option()包装的,如果我发送参数如“id = john& password = 1234”,服务器将获得Optional(id = john& password = 1234) 。但这不是我想要的,因为php无法以正常方式分析参数。我不知道这里出了什么问题;

var postString: String = "id=john&password=1111"
request.HTTPBody = (postString.dataUsingEncoding(NSUTF8StringEncoding))
println("Body will send: \(request.HTTPBody)")

var postLength:NSString = String( postString2.dataUsingEncoding(NSUTF8StringEncoding)!.length )
request.setValue(postLength, forHTTPHeaderField: "Content-Length")
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("multipart/form-data", forHTTPHeaderField: "Accept")

在上面的准备代码之后,我使用dataTaskWithRequest方法发送帖子。谷歌这个问题好几天之后,我对这个未解决的问题感到疯狂。需要一个线索来解决它。请指教!

2 个答案:

答案 0 :(得分:1)

我发现了问题!

正确的内容类型声明;

request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")    

错误的内容类型声明;

request.setValue("application/json", forHTTPHeaderField: "Content-Type")    

非常感谢您的建议和提示提醒!最后我理解问题不在Optional wrapped String中,而是在其他http属性中!

昨天我使用php将请求体回显到客户端进行调试,我总是把String包装成Optional,这是愚蠢的!阅读完这些评论后,我请php程序员将每个请求体记录到本地文件并检查内容.................没有可选的包装字符串。

对不起愚蠢的代码,非常感谢您的帮助!你们真棒!

答案 1 :(得分:-1)

只需更改变量并添加'!'你的变量。这样,它就不再是一个可选项了,而且你没有那种问题。

var postString: String! = "id=john&password=1111"