我正在尝试将以下curl请求Swagger转换为URLRequest:
curl -X GET --header 'Accept: application/json'
--header 'Authorization: key ttn-account-v2.<app-key>'
'https://<app-id>.data.thethingsnetwork.org/api/v2/query'
Run Code Online (Sandbox Code Playgroud)
URL和标题设置正确。我仍然收到响应:401-未经授权。
let key = "ttn-account-v2.<app-key>"
let url = URL(string: "https://<app-id>.data.thethingsnetwork.org/api/v2/query")
var request = URLRequest(url: url!)
request.httpMethod = "GET"
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.addValue("key \(key)", forHTTPHeaderField: "Authorization")
let task = URLSession.shared.dataTask(with: url!) { data, response, error in
guard error == nil else {
print(error!)
return
}
guard let data = data else {
print("Data is empty")
return
}
let json = try! JSONSerialization.jsonObject(with: data, options: [])
print(json)
}
task.resume()
Run Code Online (Sandbox Code Playgroud)
我想念什么吗?
我正在尝试使用在 Xcode Playground 文件中运行的一段代码从本地服务器获取一些数据:
URLSession.shared.dataTask(with: url!, completionHandler: {(data, response, error) -> Void in
if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary {
friend_ids = (jsonObj!.value(forKey: "friends") as? NSArray)!
}
}).resume()
return friend_ids
Run Code Online (Sandbox Code Playgroud)
在阅读了有关此主题的一些类似问题后,我知道 URLSession 异步运行,因此该函数在从服务器获取任何数据之前返回 nil 值。我还认为我理解完成处理程序可用于确保在继续之前实际获取数据,但不幸的是我并没有真正理解如何实现它。有人可以向我展示如何在这个简单的示例中使用完成处理程序,以确保在返回变量之前从服务器获取 ?
谢谢你!
您好我正在尝试将queryItems添加到我的URLComponents但是因为URLQueryItem返回其值作为可选项,url会在其中保留一个问号.
var params = ["id":"5"]
let queryParams = toStringDictionary(dictionary: params).map { pair in
return URLQueryItem(name: pair.key, value: pair.value)
}
var components = URLComponents(string: fullURL)
components.queryItems = queryParams
print(components.url)//This is the full url https://demo.com/users/?5
//This https://demo.com/users/?5 should be this https://demo.com/users/5
Run Code Online (Sandbox Code Playgroud)
问号当然会导致错误的网址.我无法摆脱它.
嗨,我有一个初学者问题,我在 Swift 3 中找不到好的解决方案。我希望有人能够帮助我。
如果用户凭据有效,我有以下代码将检查 rest api。我希望它等待请求完成,然后返回 true 或 false。现在它正在发送异步。
我检查 JSON 值的方式的任何改进也将受到欢迎。
func CheckUsernamePassword(username :String ,code:String )-> bool {
var validCredentials = false
let urlString = "\(self.baseurl)/accounts/validateusernamepassword.json?username=\(username)&password=\(code)&api_key=\(self.api_key)"
let url = URL(string: urlString)
URLSession.shared.dataTask(with:url!) { (data, response, error) in
if error != nil {
print("Error URLSession : \(error!)")
validCredentials = false
} else {
do {
let parsedData = try JSONSerialization.jsonObject(with: data!, options: []) as! [String:Any]
if parsedData["validated"] != nil {
if "\(parsedData["validated"]!)" == "1" {
print("Login credentials are correct") …Run Code Online (Sandbox Code Playgroud) 以下代码非常适合简单的http请求。但是我找不到在Swift 3中添加有效负载或主体字符串的方法吗?和以前的版本已过时
func jsonParser(urlString: String, completionHandler: @escaping (_ data: NSDictionary) -> Void) -> Void
{
let urlPath = urlString
guard let endpoint = URL(string: urlPath) else {
print("Error creating endpoint")
return
}
URLSession.shared.dataTask(with: endpoint) { (data, response, error) in
do {
guard let data = data else {
throw JSONError.NoData
}
guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary else {
throw JSONError.ConversionFailed
}
completionHandler(json)
} catch let error as JSONError {
print(error.rawValue)
} catch let error …Run Code Online (Sandbox Code Playgroud) 我正在使用urlsession在标头中发送承载令牌,但是我总是得到未经授权的结果。我已经看到服务器日志。我将身体放在那儿但没有头。
let key = UserDefaults.standard.object(forKey: "loginKey") as! String
print(key)
let url = NSURL(string: baseurl+"***")
let request = NSMutableURLRequest(url: url! as URL)
request.httpMethod = "GET"
request.addValue("Bearer " + key, forHTTPHeaderField: "Authorization")
let task = URLSession.shared.dataTask(with: request as URLRequest)
{(data,response,error) -> Void in
if error != nil
{
print(error?.localizedDescription as Any)
return
}
do
{
let json = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary
print(json)
}
catch let error as NSError
{
print(error.localizedDescription)
}
}
task.resume()
Run Code Online (Sandbox Code Playgroud)
我也尝试过 request.setValue("Bearer " + key, …
我有以下代码:
let primaryCurr = "https://api.independentreserve.com/Public/GetValidPrimaryCurrencyCodes"
guard let url = URL(string: primaryCurr) else {
print("Invalid URL: \(primaryCurr)")
return nil
}
let task = URLSession.shared.dataTask(with: url) { data, response, error in
guard error == nil else {
print(error!)
return
}
guard let data = data else {
print("Data is empty")
return
}
let json = try! JSONSerialization.jsonObject(with: data, options: [])
print("JSON: ", json)
}
task.resume()
}
Run Code Online (Sandbox Code Playgroud)
消息区域得到以下信息:
0x608000162580]:10:-72000 Err(-65563)2017-11-21 22:42:01.929003 + 1000 AltcoinTrader [36412:12415423]任务<209F1681-53BB-4E9D-A553-E349AE087159>。<1> HTTP加载失败(错误代码:-1003 [10:-72000])2017-11-21 22:42:01.929234 + 1000 AltcoinTrader [36412:12415423]任务<209F1681-53BB-4E9D-A553-E349AE087159>。<1>已完成但有错误-代码:-1003错误域= NSURLErrorDomain代码= …
我的macOS应用程序使用的是一个简单功能,该功能应建立与服务器的连接,但是无论我如何尝试,我都无法使其正常运行。
我从其他网站复制了一个示例,但是它不起作用。我还观看了其他示例,但其中大多数都非常古老且过时。这是我的代码:
func connect(){
// Set up the URL request
let todoEndpoint: String = "https://www.google.com"
guard let url = URL(string: todoEndpoint) else {
print("Error: cannot create URL")
return
}
let urlRequest = URLRequest(url: url)
// set up the session
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
// make the request
let task = session.dataTask(with: urlRequest, completionHandler: { (data, response, error) in
// do stuff with response, data & error here
print(error as Any)
print(response as Any)
})
task.resume() …Run Code Online (Sandbox Code Playgroud) 我有这个帐户结构。当我发送“POST”端点并使用它们将成功解码返回给 swift 对象时,我想忽略以下属性环境和 Id 编码到 JSON 对象
更新我有这个错误属性类型'[环境]'与其包装类型'SkipEncode'的'wrappedValue'属性不匹配
struct Account: Codable {
let accountID, displayName, managedByID, id: String
let environments: [Environment]
let contacts: [Contact]
enum CodingKeys: String, CodingKey {
case accountID
case displayName
case managedID
case id
case environments
case contacts
}
}
Run Code Online (Sandbox Code Playgroud) 我想缓存API的响应。当互联网可用时,它应该从服务器获取数据,并且每次都应该更新本地缓存的数据,当互联网不可用时,它应该显示缓存的数据。有可能吗Alamofire or URLSession?或者我是否需要使用数据库并且我应该手动处理这个问题?
我正在尝试进行简单的网络调用,但在使用结果类型时遇到错误。Xcode 告诉我“无法专门化非泛型类型‘结果’”。我正在寻找解决方案,但在互联网和 stackoverflow 中都没有成功找到它。错误是:
Cannot specialize non-generic type 'Result'
Remove '<FriendsModel,NetworkingError>'
Run Code Online (Sandbox Code Playgroud)
我的代码是:FriendsWebServices.swift
import Foundation
enum NetworkingError:Error{
case nodataAvailable
case invalidURL
case canNotProcessData
case encodingError
case statusCodeIsNotOkay
}
class FriendsWebServices{
static let shared = FriendsWebServices()
private let session = URLSession.shared
//Get Method
func getPosts(completion: @escaping (Result<FriendsModel,NetworkingError>)->Void){
let urlStirng = EndPointSouce.getEndPoint(type: .Base) + EndPointSouce.getEndPoint(type: .HowManyFriends(10))
guard let url = URL(string: urlStirng) else {
completion(.failure(.invalidURL))
return
}
// Create the url request
var request = URLRequest(url: url)
request.httpMethod = "GET"
let dataTask = …Run Code Online (Sandbox Code Playgroud) urlsession ×11
swift ×8
ios ×5
json ×3
swift3 ×3
macos ×2
xcode ×2
alamofire ×1
caching ×1
codable ×1
curl ×1
http-headers ×1
httprequest ×1
https ×1
networking ×1
urlrequest ×1