我对swift非常陌生,所以我的代码中可能会有很多错误,但我试图实现的是向带有paramters的本地主机服务器发送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)
}
}
在构建get
请求时,没有请求的正文,而是所有内容都在URL上进行。要构建URL(以及正确的百分比转义),还可以使用urlcomponents
。
var url = URLComponents(string: "https://www.google.com/search/")!
url.queryItems = [
URLQueryItem(name: "q", value: "War & Peace")
]
唯一的诀窍是,大多数web服务需要+
字符百分比转义(因为它们会将其解释为application/x-www-form-urlencoded
规范规定的空格字符)。但是urlcomponents
不会对其进行百分比转义。Apple认为+
是查询中的有效字符,因此不应该转义。从技术上讲,它们是正确的,在URI查询中允许这样做,但是在application/x-www-form-urlencoded
请求中有特殊的含义,并且不应该不转义地传递。
Apple承认我们必须对+
字符进行百分比转义,但建议我们手动转义:
var url = URLComponents(string: "https://www.wolframalpha.com/input/")!
url.queryItems = [
URLQueryItem(name: "i", value: "1+2")
]
url.percentEncodedQuery = url.percentEncodedQuery?.replacingOccurrences(of: "+", with: "%2B")
这是一个不优雅的解决方案,但它是有效的,如果您的查询可能包含+
字符,并且您有一个将它们解释为空格的服务器,苹果就会建议您这样做。
因此,将其与SendRequest
例程结合起来,您将得到如下内容:
func sendRequest(_ url: String, parameters: [String: String], completion: @escaping ([String: Any]?, Error?) -> Void) {
var components = URLComponents(string: url)!
components.queryItems = parameters.map { (key, value) in
URLQueryItem(name: key, value: value)
}
components.percentEncodedQuery = components.percentEncodedQuery?.replacingOccurrences(of: "+", with: "%2B")
let request = URLRequest(url: components.url!)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard
let data = data, // is there data
let response = response as? HTTPURLResponse, // is there HTTP response
200 ..< 300 ~= response.statusCode, // is statusCode 2XX
error == nil // was there no error
else {
completion(nil, error)
return
}
let responseObject = (try? JSONSerialization.jsonObject(with: data)) as? [String: Any]
completion(responseObject, nil)
}
task.resume()
}
sendRequest("someurl", parameters: ["foo": "bar"]) { responseObject, error in
guard let responseObject = responseObject, error == nil else {
print(error ?? "Unknown error")
return
}
// use `responseObject` here
}
我正在使用Alamofire4和Swift3构建一个网络堆栈。根据Alamofire指南,我为服务的endpoint创建了一个路由器。我目前正在使用OpenWeatherMap的免费API,但我发现创建get请求时存在问题。这就是所需的url:http://api.openweatherap.org/data/2.5/weather?q=rome&appid=my_api_key。粘贴在浏览器上,
主要内容:通过 HttpServletRequest 获取请求参数,通过形参获取请求参数,使用 @RequestParam 注解获取,通过实体类对象获取(推荐),解决获取请求参数的乱码问题Spring MVC 提供了多种获取请求参数的方式: 通过 HttpServletRequest 获取请求参数 通过控制器方法的形参获取请求参数 使用 @RequestParam 注解获取请求参数 通过实体类对象获取请求参数(推荐) 下面我们就对这些获取请求参数的方式一一进行介绍。 通过 HttpServlet
问题内容: 我是一个Node.js新手,并且正在用它创建我的第一个大型应用程序(我正在使用Express)。当用户使用get请求加载ID时,我需要让我的网页执行一些javascript画布绘制 我知道我可以用一个简单的方法来处理 但我不知道如何使用该ID的要求的图纸开始我的网页。互联网上Express和Get上的每个教程都说明了如何处理get请求…这个问题是关于“接下来会发生什么?” 改写:我不确
问题内容: 下载数据时,有什么方法可以迅速取得进展? 下载数据时,我需要显示进度栏。 问题答案: 您可以使用此代码通过进度条及其委托功能来显示下载过程。
问题内容: 我正在尝试在iOS 8中针对SWIFT中的Objective-C 实现答案 我打电话给 这将导致“致命错误:在展开可选值时意外发现nil” 问题答案: 试试这个代码: