gpt4 book ai didi

ios - 使用 NSMutableURLRequest/URLRequest 请求 http

转载 作者:行者123 更新时间:2023-11-28 13:46:13 25 4
gpt4 key购买 nike

向 api-rest 发出请求的正确方法是什么?

let myUrl = URL(string: "https://myhost.com/test/wp-json/jwt-auth/v1/token")
var request = URLRequest(url:myUrl!)

let request = NSMutableURLRequest(url: NSURL(string: "https://myhost.com/test/wp-json/jwt-auth/v1/token")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)

我什么时候应该使用其中之一?

最佳答案

除了Leo的评论,请在下面找到请求和响应的示例类,我用它来进行 rest api 调用。

请求类:

public struct APIRequest {

let url: URL
let method: HTTPMethod
var httpHeaders: HTTPHeaders
let body: Data?

init(url: URL,
method: HTTPMethod,
httpHeaders: HTTPHeaders,
body: Data? = nil
) {
self.url = url
self.method = method
self.httpHeaders = httpHeaders
self.body = body
}
}

extension APIRequest {

public func asURLRequest() -> URLRequest {

var urlRequest = URLRequest(url: self.url)
for (headerField, headerValue) in self.httpHeaders {
urlRequest.addValue(headerValue, forHTTPHeaderField: headerField.rawValue)
}

urlRequest.httpMethod = self.method.rawValue
urlRequest.httpBody = self.body
return urlRequest
}
}

extension URLRequest {

public var debugDescription: String {

let urlString = "URL: \(self.url?.absoluteString ?? "")"
let methodString = "Method: \(self.httpMethod ?? "")"
var httpHeadersString = "Headers: \n"
for (headerField, headerValue) in self.allHTTPHeaderFields ?? [:] {
httpHeadersString = httpHeadersString.appending("\(headerField) : \(headerValue) \n")
}

// Print Body as JSON

let description = [
urlString,
methodString,
httpHeadersString
]
return "Request: { " + description.joined(separator: "\n") + " }"
}
}

响应类

public struct APIResponse {

let request: URLRequest?
let response: HTTPURLResponse?
var jsonData: JSONObject?
var data: Data?
var statusCode: Int
var url: URL?
var httpHeaders: [AnyHashable: Any]?
var error: Error?

init(request: URLRequest?,
response: HTTPURLResponse?,
responseData: Data?,
error: Error?) {
self.request = request
self.response = response
self.jsonData = nil
self.data = nil
self.statusCode = 0
self.url = nil
self.httpHeaders = nil

if let httpResponse = response {
statusCode = httpResponse.statusCode
url = httpResponse.url
httpHeaders = httpResponse.allHeaderFields
data = responseData
}

if statusCode == 401 {
self.error = // Auth Error
} else if (200..<300).contains(statusCode) == false {
self.error = // Bad Error
}
}
}

HTTP方法

public enum HTTPMethod: String {

case get = "GET"
case post = "POST"
case put = "PUT"
case delete = "DELETE"
}

HttpHeader

public typealias HTTPHeaders = [HttpHeadersKey: String]

public enum HttpHeadersKey: String {

case contentType = "Content-Type"
case userAgent = "User-Agent"
case accept = "Accept"
case date = "Date"
case authorization = "Authorization"
}

public enum MIMEType: String {

case json = "application/json"
case imagePng = "image/png"
}

public struct DefaultHeader {

var value = HTTPHeaders()

init() {
self.value[HttpHeadersKey.contentType] = MIMEType.json.rawValue
self.value[HttpHeadersKey.accept] = MIMEType.json.rawValue
self.value[HttpHeadersKey.date] = Date().rfc1123String()
}
}

关于ios - 使用 NSMutableURLRequest/URLRequest 请求 http,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55367403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com