当前位置: 首页 > 知识库问答 >
问题:

Swift POST请求发送空正文

易阳云
2023-03-14

代码如下:

func makePOSTCall(endpoint: String, languageName: String) {
    guard let url = URL(string: endpoint) else {
        print("Could not create URL.")
        return
    }

    let requestLang: [String: Any] = ["name": languageName]
    let requestBody = try? JSONSerialization.data(withJSONObject: requestLang)

    var urlRequest = URLRequest(url: url)
    urlRequest.httpBody = requestBody
    urlRequest.httpMethod = "POST"
    let session = URLSession.shared
    let task = session.dataTask(with: urlRequest) {

        data, response, error in
        guard let data = data, error == nil else {
            print(error?.localizedDescription ?? "No data")
            return
        }

        let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
        if let responseJSON = responseJSON as? [String: Any] {
            print(responseJSON)
        }

    }
    task.resume()
}

这将向flask发送一个{“name”:“go”}JSON字典。Flask应该将语言名称追加到数组中,并在响应中返回完整的数组。现在,当我手动发送请求时,这就工作了,所以这不是Flask的错误。但是当我从iOS发送上述内容时,我在flask控制台中得到request.json==None。很明显,我送的是一具空尸体,但我不应该。你知道我哪里出了问题吗?

@IBAction func pressedMakePOSTCall(_ sender: UIButton) {

    makePOSTCall(endpoint: "http://127.0.0.1:5000/lang", languageName: "Go")

}

共有1个答案

汤枫
2023-03-14

@weissja19是正确的,我需要将内容类型设置为application/json。加法

urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.setValue("application/json", forHTTPHeaderField: "Accept")

修正了错误。现在代码按我预期的方式工作。

附言。我抓不到它,因为我使用app Paw进行测试,它自动设置内容类型。

 类似资料:
  • 问题内容: 我查看了用于$ resource的AngularAPI,但没有找到将s发送到RESTful服务的方法。 我知道使用$http方法是可能的,所以,也可以使用吗? 显然,这是的选项。 动作 – {string} –动作的名称。该名称成为资源对象上方法的名称。 方法 – {string} – HTTP请求方法。有效方法为:GET,POST,PUT,DELETE和JSONP params –

  • 我查看了$resource的Angular API,但没有找到向RESTful服务发送的方法。 isArray-{boolean=}-如果为true,则此操作返回的对象为数组,请参见returns部分。 目前,我还没有找到发送包含JSON对象的请求负载的任何方法。

  • 发送请求 发送同步请求 Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/ Web3ClientVersion web3ClientVersion = web3.web3ClientVersion().send(); String clientVersion = web3Client

  • 我制作了一个简单的JavaScript页面,当按下“发送”按钮时,该页面应该显示时间表并通过HTTP发送数据。 数据应该发送到一个Arduino使用这个简单的方案: http://arduinoip/DATASTARTSHEREhh:mm;hh:mm;hh:mm;[...];DATAENDSHERE 我使用以下代码打印我在Arduino串行监视器中收到的所有数据: 我收到的数据如下: 新客户 CM

  • 很多时候我们需要在页面打开的时候,读取远程的内容,然后在当前页面显示. 这就需要用到 http请求了. vue页面调用http请求 vuejs 内置了对发送http请求的支持. 只需要在对应页面的script 标签内加上对应的代码就好. 例如: 我们新增一个页面,叫 "博客列表页" : src/components/BlogList.vue, 内容如下: <template> <div >

  • 交互过程中,发送请求是第一步。那么,我们将如何构造一个请求呢? 这一章节,我们将一步一步来构建一个 Ajax 请求。学习本节,你将学会: 如何通过 XMLHttpRequest 和 ActiveXObject 来构造一个通用的 xhr 对象。 如何通过 xhr 对象来发送 GET、 POST 等请求。 Content-type 在 Ajax 数据发送中的作用。 那么,接下来让我们进入本节的学习吧。