标签: urlsession

将CURL转换为URLRequest

我正在尝试将以下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)

我想念什么吗?

curl urlrequest ios swift urlsession

2
推荐指数
1
解决办法
537
查看次数

Swift:URLSession 完成处理程序

我正在尝试使用在 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 值。我还认为我理解完成处理程序可用于确保在继续之前实际获取数据,但不幸的是我并没有真正理解如何实现它。有人可以向我展示如何在这个简单的示例中使用完成处理程序,以确保在返回变量之前从服务器获取 ?

谢谢你!

completionhandler swift urlsession

2
推荐指数
1
解决办法
5514
查看次数

URLQueryItem值是可选的

您好我正在尝试将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)

问号当然会导致错误的网址.我无法摆脱它.

ios swift urlsession

2
推荐指数
1
解决办法
244
查看次数

如何在从 Swift 3 中的函数返回结果之前等待 URLSession 完成

嗨,我有一个初学者问题,我在 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)

xcode json ios swift3 urlsession

1
推荐指数
1
解决办法
4289
查看次数

带有正文/有效负载的URLSession.shared.dataTask

以下代码非常适合简单的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)

httprequest nsurlsessiondatatask swift3 urlsession

1
推荐指数
1
解决办法
4981
查看次数

在Swift 3中使用urlsession在http标头中发送承载令牌的问题

我正在使用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, …

json http-headers ios swift3 urlsession

1
推荐指数
1
解决办法
3570
查看次数

URLSession“找不到主机名”,但是我在浏览器中看到它

  我有以下代码:

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 https xcode swift urlsession

1
推荐指数
1
解决办法
860
查看次数

简单的URLSession示例始终因错误而失败

我的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)

macos swift urlsession

1
推荐指数
1
解决办法
655
查看次数

忽略 swift Codable 中的以下属性?

我有这个帐户结构。当我发送“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)

json swift urlsession codable

1
推荐指数
2
解决办法
1001
查看次数

如何在iOS中缓存响应并仅在互联网不可用时显示?

我想缓存API的响应。当互联网可用时,它应该从服务器获取数据,并且每次都应该更新本地缓存的数据,当互联网不可用时,它应该显示缓存的数据。有可能吗Alamofire or URLSession?或者我是否需要使用数据库并且我应该手动处理这个问题?

caching ios swift alamofire urlsession

1
推荐指数
1
解决办法
6639
查看次数

无法专门化非泛型类型“结果”

我正在尝试进行简单的网络调用,但在使用结果类型时遇到错误。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)

networking swift urlsession

0
推荐指数
1
解决办法
3860
查看次数