在Swift中向本地服务器发出发布请求时出现400错误

Jonathan Yuan

我正在尝试向本地服务器发出http POST请求,但是当我拨打电话时,服务器端出现了400错误,因此我认为我在Swift代码中发出请求的方式存在问题。我不确定我是否正确设置了JSON正文,但是任何帮助将不胜感激。提前致谢!

SWIFT代码:

    let url = URL(string: "http://127.0.0.1:5000/get-friends")!
    var request = URLRequest(url: url, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10)
    request.httpMethod = "POST"
    let tempIdDictionary: [String: Int] = ["user_id": 17]
    let jsonBody = try? JSONSerialization.data(withJSONObject: tempIdDictionary, options: .fragmentsAllowed)
    request.httpBody = jsonBody
    
    let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
        guard let data = data else { return }
        do {
            let friendList = try JSONDecoder().decode(FriendList.self, from: data)
        } catch let jsonErr {
            print(jsonErr)
        }
    }
    task.resume()

存放json数据的结构:

struct FriendList: Codable {
    let result: [Int]
}

这是我尝试提出请求时迅速显示的错误:

dataCorrupted(Swift.DecodingError.Context(codingPath: [], debugDescription: "The given data was not valid JSON.", underlyingError: Optional(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.})))

邮递员要求

科学怪人

更新:从您刚刚添加的屏幕快照中可以明显看出,您需要以form-data而不是形式传递数据json添加以下扩展名的方法如下:

extension URLRequest {

    struct MultipartFile {
        var data: Data
        var mimeType, filename: String
    }

    mutating func multipartFormData(
        parameters: [String: String] = [:],
        files: [MultipartFile] = []) {

        var body = Data()
        let boundary = "Boundary-\(UUID().uuidString)"
        let boundaryPrefix = "--\(boundary)\r\n"

        for (key, value) in parameters {
            body + boundaryPrefix
            body + "Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n"
            body + "\(value)\r\n"
        }

        for file in files {
            body + boundaryPrefix
            body + "Content-Disposition: form-data; name=\"file\"; filename=\"\(file.filename)\"\r\n"
            body + "Content-Type: \(file.mimeType)\r\n\r\n"
            body.append(file.data)
            body + "\r\n"
        }

        body + "--".appending(boundary.appending("--"))

        httpBody = body
        httpMethod = httpMethod == "GET" ? "POST" : httpMethod
        setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
    }
}

extension Data {

    static func + (data: inout Data, string: String) {
        data.append(Data(string.utf8))
    }
}

然后,如下修改请求:

request.httpMethod = "POST"
request.multipartFormData(parameters: ["user_id": 17])
// remove the `JSON` body part
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用angular向服务器发出发布请求

来自分类Dev

如何向本地服务器发出“发布”请求?

来自分类Dev

AngularJS使用键值对向服务器发出发布请求

来自分类Dev

AngularJS使用键值对向服务器发出发布请求

来自分类Dev

使用Axios发出发布请求时出现网络错误

来自分类Dev

向服务器发出AJAX请求时出现错误代码415

来自分类Dev

从客户端向服务器发送JSON字符串时出现400错误的请求异常

来自分类Dev

在事务中从WCF服务向REST API发出发布请求

来自分类Dev

在事务中从WCF服务向REST API发出发布请求

来自分类Dev

将React应用中的请求发布到本地主机上的Apache服务器中的PHP文件时出现CORS错误

来自分类Dev

将React应用中的请求发布到本地主机上的Apache服务器中的PHP文件时出现CORS错误

来自分类Dev

Undertow核心HTTPS服务器发出400错误请求

来自分类Dev

当我向 api 服务器发出 post 请求时收到 404 错误

来自分类Dev

发出发布请求时Vue.js axios错误

来自分类Dev

如何在Swift iOS中向php服务器发出HTTP请求

来自分类Dev

在 swift 4 中使用 Alamofire 发出请求时,来自服务器的 JSON 解析错误

来自分类Dev

向ODATA服务器发出请求时,轻松地向请求添加标头

来自分类Dev

为什么在发出发布请求时用户名不会出现在我的负载中?

来自分类Dev

如何向本地托管的node.js服务器发出jQuery请求?

来自分类Dev

在Express.js上使用Axios向Spotify API发出POST请求时出现错误400

来自分类Dev

正在向服务器发出请求时iOS7的加载指示器

来自分类Dev

正在向服务器发出请求时iOS7的加载指示器

来自分类Dev

使用angular很难向JSON文件发出发布请求

来自分类Dev

request-pormise - 向带有端口的服务器发出错误的请求

来自分类Dev

当我进行http2推送时,我向服务器发出请求?

来自分类Dev

向 netty 服务器发出请求时不会调用 ChannelRead 方法

来自分类Dev

直接将图像从ios直接上传到php服务器文件夹,无论是否发出发布请求

来自分类Dev

尝试向它发出发布请求时未找到 Node app.get,但可以在浏览器中使用

来自分类Dev

使用python发出发布请求时,如何解决解析错误?

Related 相关文章

  1. 1

    使用angular向服务器发出发布请求

  2. 2

    如何向本地服务器发出“发布”请求?

  3. 3

    AngularJS使用键值对向服务器发出发布请求

  4. 4

    AngularJS使用键值对向服务器发出发布请求

  5. 5

    使用Axios发出发布请求时出现网络错误

  6. 6

    向服务器发出AJAX请求时出现错误代码415

  7. 7

    从客户端向服务器发送JSON字符串时出现400错误的请求异常

  8. 8

    在事务中从WCF服务向REST API发出发布请求

  9. 9

    在事务中从WCF服务向REST API发出发布请求

  10. 10

    将React应用中的请求发布到本地主机上的Apache服务器中的PHP文件时出现CORS错误

  11. 11

    将React应用中的请求发布到本地主机上的Apache服务器中的PHP文件时出现CORS错误

  12. 12

    Undertow核心HTTPS服务器发出400错误请求

  13. 13

    当我向 api 服务器发出 post 请求时收到 404 错误

  14. 14

    发出发布请求时Vue.js axios错误

  15. 15

    如何在Swift iOS中向php服务器发出HTTP请求

  16. 16

    在 swift 4 中使用 Alamofire 发出请求时,来自服务器的 JSON 解析错误

  17. 17

    向ODATA服务器发出请求时,轻松地向请求添加标头

  18. 18

    为什么在发出发布请求时用户名不会出现在我的负载中?

  19. 19

    如何向本地托管的node.js服务器发出jQuery请求?

  20. 20

    在Express.js上使用Axios向Spotify API发出POST请求时出现错误400

  21. 21

    正在向服务器发出请求时iOS7的加载指示器

  22. 22

    正在向服务器发出请求时iOS7的加载指示器

  23. 23

    使用angular很难向JSON文件发出发布请求

  24. 24

    request-pormise - 向带有端口的服务器发出错误的请求

  25. 25

    当我进行http2推送时,我向服务器发出请求?

  26. 26

    向 netty 服务器发出请求时不会调用 ChannelRead 方法

  27. 27

    直接将图像从ios直接上传到php服务器文件夹,无论是否发出发布请求

  28. 28

    尝试向它发出发布请求时未找到 Node app.get,但可以在浏览器中使用

  29. 29

    使用python发出发布请求时,如何解决解析错误?

热门标签

归档