首页 > 解决方案 > 试图快速从 API 获取一些数据,我迷路了,我做错了什么?

问题描述

试图从 deepai.com 获取 AI 生成的文本

他们提供的示例如下所示:

curl \
-F 'text=YOUR_TEXT_HERE' \
-H 'api-key:quickstart-QUdJIGlzIGNvbWluZy4uLi4K' \
https://api.deepai.org/api/text-generator

我正在尝试快速复制相同的内容:

var request = URLRequest(url: url)
request.setValue("quickstart-QUdJIGlzIGNvbWluZy4uLi4K", forHTTPHeaderField: "api-key")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

let body = ["text": "Donald Trump"]

let bodyData = try? JSONSerialization.data(withJSONObject: body, options:[])

request.httpMethod = "POST"
request.httpBody = bodyData


URLSession.shared.dataTask(with: request){ (data, responce, error) in
    print(responce!)
    if let error = error {
        print(error)
    } else if let data = data {
        print(data)
    }
}.resume()

我得到状态码 400。不要深入了解我的选项展开等等。告诉我我做错了什么?为什么 curl 有效而我的 swift 代码无效?

更新

尝试了有关多部分表单数据的建议问题/答案的解决方案,但仍然无法正常工作。请看一下

var request = URLRequest(url: url)

let boundary = UUID().uuidString
request.setValue("quickstart-QUdJIGlzIGNvbWluZy4uLi4K", forHTTPHeaderField: "api-key")
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")


let body = ["text": "Donald Trump"]

var data = Data()

    for(key, value) in body{
        // Add the reqtype field and its value to the raw http request data
        data.append("\r\n--\(boundary)\r\n".data(using: .utf8)!)
        data.append("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n".data(using: .utf8)!)
        data.append("\(value)".data(using: .utf8)!)
    }

data.append("\r\n--\(boundary)--\r\n".data(using: .utf8)!)

request.httpMethod = "POST"
//request.httpBody = data


URLSession.shared.uploadTask(with: request, from: data){ (data, responce, error) in
    print(responce!)
    if let error = error {
        print(error)
    } else if let data = data {
        print(data)
    }
}.resume()

不要为我的愚蠢而生气!)

标签: swiftapihttp

解决方案


推荐阅读