ios - 有没有不同的方式如何发送 HTTP "POST"请求而不使用第三方库使用自定义 header 和正文?

标签 ios http post networking request

我正在尝试发送一个 HTTP“POST”请求,请求一个应该返回 base64 编码图片的 Web 服务。这是服务的 HTTP 请求示例:

https://imgur.com/a/XTbVxEW

我正在尝试以下操作:

func fetchPicture(username: String, password: String) {
    let url = URL(string: "https://myurl.com/download/bootcamp/image.php")!
    var request = URLRequest(url: url)
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    request.httpMethod = "POST"
    request.setValue(password.stringToSHA1Hash(), forHTTPHeaderField: "Authorization")
    let postString = "username=\(username)"
    request.httpBody = postString.data(using: .utf8)
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        guard let data = data, error == nil else {                                                 // check for fundamental networking error
            print("error=\(error)")
            return
        }
        if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {           // check for http errors
            print("statusCode should be 200, but is \(httpStatus.statusCode)")
            print("response = \(response)")
        }
        let responseString = String(data: data, encoding: .utf8)
        print("responseString = \(responseString)")
    }
    task.resume()
}

我收到错误 401 Unauthorized,我实际上不知道这是因为我的请求全部错误还是只是登录名首字母错误。如果有人可以检查代码并告诉我它是否确实对应于上面显示的请求示例,那就太好了。

谢谢!

最佳答案

我注意到的第一件事是您没有设置请求 HTTP 方法:

request.httpMethod = “POST”

关于ios - 有没有不同的方式如何发送 HTTP "POST"请求而不使用第三方库使用自定义 header 和正文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54310660/

相关文章:

ios - xcode 7.1 下标的使用不明确

ios - 在 Xcode 8 中未调用 didRegisterForRemoteNotificationsWithDeviceToken

ios - 子类 UICollectionViewCell 不显示

ios - 创建带轨道的 GPX 文件的简单方法

java - 设置 HTTP 响应代码和 HTTP 方法

http - "line-based text data: text/html"

iOS 适用于通过 http 处理双向同步的最高级别网络抽象是什么?

php - 与用户一起发送我自己的 $_POST 数据

javascript - 使用 PHP 的 jQuery Ajax POST 示例

java - 在 servlet 中读取请求正文时出现问题