我对swift还很陌生,所以我的代码中可能会有很多错误,但我想实现的是用参数向localhost服务器发送一个GET
请求。更重要的是,我的函数有两个参数baseURL:string,params:NSDictionary
。我不知道如何将这两个参数组合到实际的URLRequest中?以下是我到目前为止所尝试的
func sendRequest(url:String,params:NSDictionary){
let urls: NSURL! = NSURL(string:url)
var request = NSMutableURLRequest(URL:urls)
request.HTTPMethod = "GET"
var data:NSData! = NSKeyedArchiver.archivedDataWithRootObject(params)
request.HTTPBody = data
println(request)
var session = NSURLSession.sharedSession()
var task = session.dataTaskWithRequest(request, completionHandler:loadedData)
task.resume()
}
}
func loadedData(data:NSData!,response:NSURLResponse!,err:NSError!){
if(err != nil){
println(err?.description)
}else{
var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
println(jsonResult)
}
}
7条答案
按热度按时间edqdpe6u1#
当构建一个
GET
请求时,没有请求体,而是所有的内容都放在URL上。要构建一个URL(并正确地对它进行百分比转义),也可以使用URLComponents
。唯一的窍门是大多数Web服务需要
+
字符百分比转义(因为他们会将其解释为application/x-www-form-urlencoded
规范中规定的空格字符)。但是URLComponents
不会对其进行百分比转义。苹果认为+
是查询中的有效字符,因此不应进行转义。从技术上讲,他们是正确的,在URI的查询中允许使用它,但它在application/x-www-form-urlencoded
请求中有特殊含义,实际上不应该以未转义形式传递。Apple承认我们必须对
+
字符进行%转义,但建议我们手动进行:这是一个不太优雅的解决方案,但它是有效的,如果您的查询可能包含
+
字符,并且您有一个服务器将它们解释为空格,这是Apple的建议。因此,将其与
sendRequest
例程结合起来,您将得到如下结果:你可以这样称呼它:
就我个人而言,我现在会使用
JSONDecoder
并返回一个自定义的struct
而不是字典,但这在这里并不重要,希望这说明了如何将参数百分比编码到GET请求的URL中的基本思想。请参阅previous revision of this answer了解Swift 2和手动百分比转义格式副本。
o2rvlv0m2#
使用NSURLComponents构建NSURL,如下所示
来源:https://www.ralfebert.de/snippets/ios/encoding-nsurl-get-parameters/
hvvq6cgz3#
我正在用这个,在操场上试试。定义基本网址为常量结构
nvbavucw4#
雨燕3:
我用它来获取
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
中UIImagePickerController
的映像名称:bjg7j2ky5#
如果键和值都符合
CustomStringConvertable
,则可以扩展Dictionary
以仅提供stringFromHttpParameter
,如下所示这要干净得多,并且防止了在没有必要调用
stringFromHttpParameters
方法的字典上意外调用该方法um6iljoc6#
@Rob建议的这个扩展适用于Swift 3.0.1
我无法用Xcode 8.1(8B 62)编译他帖子中包含的版本
lpwwtiir7#
我用途: