Swift 3 - 创建简单请求方法 POST (URLRequestConvertible) 的问题
Posted
技术标签:
【中文标题】Swift 3 - 创建简单请求方法 POST (URLRequestConvertible) 的问题【英文标题】:Swift 3 - issue to create easy request method POST (URLRequestVonvertible) 【发布时间】:2017-06-12 19:21:32 【问题描述】:我正在 Xcode 8.3.2 中使用 Swift 3.0 和 ios 10 开发应用程序。但是当我尝试从此 APIRest (http://schematic-ipsum.herokuapp.com/) 检索 JSON 时遇到问题。问题是什么?或者你会如何打电话。如果您需要有关代码的更多信息,请告诉我,但基本上,我只想调用该页面以恢复传记。
enter image description here
我的代码是这样的:
import AlamofireDomain
import Alamofire
import ObjectMapper
class AuthorDAO : SimpleDAO
func getBiography(_ parameters: Dictionary<String, Int>,
callbackFuncionOK: @escaping
(PropertiesAuthorModel)->(),
callbackFunctionERROR: @escaping (Int,NSError)->())
let ulr = NSURL( string: "http://schematic-ipsum.herokuapp.com/" as String)
let request = NSMutableURLRequest(url: ulr! as URL)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Constent-Type")
let data = try! JSONSerialization.data(withJSONObject: parameters, options: JSONSerialization.WritingOptions.prettyPrinted)
let json = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
if let json = json
print(json)
request.httpBody = json!.data(using: String.Encoding.utf8.rawValue)
Alamofire.request(request as URLRequest)
.responseJSON response in
if response.result.isSuccess
if let status = response.response?.statusCode
switch(status)
//MARK: CONTROL ON DIFERENTS KINDS OF RESPONSES ON SERVER
case 200:
if let value = response.result.value
let biographyResponse = Mapper<PropertiesAuthorModel>().map(JSONObject: value)
callbackFuncionOK(biographyResponse!)
//case 400: ..., case 404: ...
default:
break
//MARK: ERROR ON SERVER
else
var statusCode = -1
if let _response = response.response
statusCode = _response.statusCode
var nsError: NSError = NSError(domain: Constants.UNKNOWN_HTTP_ERROR_MSG,
code: Constants.UNKNOWN_HTTP_ERROR_ID,
userInfo: nil)
if let _error = response.result.error
nsError = _error as NSError
callbackFunctionERROR(statusCode,nsError)
错误是:“Error Domain=Alamofire.AFError Code=4“JSON 由于错误而无法序列化:无法读取数据,因为它的格式不正确。” 400 "
问题是它没有进入“if response.result.isSuccess ”,因为响应的结果是“nil”,直接进入“else”。显示我评论过的错误。可能是因为我必须在 httpBody 请求中发送 JSON 格式吗?我该怎么做?
【问题讨论】:
您需要提供用于访问此 API 的代码。此外,发布您在尝试访问 REST 服务时收到的任何错误消息。 感谢您的回答!我添加了更多信息,例如代码和错误。 【参考方案1】:您的问题应该更清楚。 “问题是什么?”没有更多信息无法回答。
要发出 HTTP 请求,请查看 Alamofire,这是一个用 Swift 编写的 HTTP 网络库:https://github.com/Alamofire/Alamofire
Alamofire.request("https://httpbin.org/get").responseJSON response in
print(response.request) // original URL request
print(response.response) // HTTP URL response
print(response.data) // server data
print(response.result) // result of response serialization
if let JSON = response.result.value
print("JSON: \(JSON)")
【讨论】:
对不起,我没有更清楚。我只想向 API 发出请求 POST 和参数 ["n":2]。其中“n”是以 JSON 格式返回 API 的结果总数。但我不能以任何方式。 我的实际代码是:es.zimagez.com/zimage/capturadepantalla2017-06-12alas225042.php 并显示此错误“Error Domain=Alamofire.AFError Code=4”JSON 由于错误而无法序列化:无法读取数据,因为它格式不正确。" 400" 你知道是什么问题吗? 您需要为响应正文设置适当的 JSON。例如: "type": "object", "properties": "id": "type": "string", "ipsum": "id" , "name": "type": "string ", "ipsum": "name" , "email": "type": "string", "format": "email" , "bio": "type": "string", "ipsum": "sentence" , "age": "type": "integer" , "avatar": "type": "string", "ipsum": "small image" 感谢您的回答!我在我的问题中添加了更多代码。关于您的回复,我无法设置适当的 JSON,因为我的代码已停止在“else”中。因为我的回答是“nil” :( ....以上是关于Swift 3 - 创建简单请求方法 POST (URLRequestConvertible) 的问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 POST 请求 iOS Swift 3 发送嵌套 JSON