【问题标题】:iOS - HTTP Method not making POST Request but instead making GETiOS - HTTP 方法不发出 POST 请求,而是发出 GET
【发布时间】:2019-11-30 23:01:12
【问题描述】:

我正在尝试使用 URLSession(和 AlamoFire)在我的应用程序中进行 POST 调用,但都没有运气,我正在检查 Charles Proxy 上的网络调用,它总是作为 GET 调用发送,即使我已经将 HTTPMethod 指定为“POST”或 .post。

最奇怪的部分是更新对“DELETE”或“PUT”的调用......只是不是“POST”或.post

我尝试在 URLSession 中从头开始构建请求,而不是使用 AlamoFire,尝试更改 HTTPMethod(有效,但不适用于 POST)

让会话 = URLSession.shared 让 url = URL(字符串:endpointURL)!

    var request = URLRequest(url: url)
    request.httpMethod = "POST"

    let jsonData: Data = try! requestProto.serializedData()

    let task = session.uploadTask(with: request, from: jsonData) { data, response, error in
        print("request made")
    }

    task.resume()

预期:Charles 记录了一个 POST 调用 实际:Charles 正在为 GET 和 POST 调用记录 GET 调用,但 DELETE 和 PUT 工作正常。

【问题讨论】:

    标签: ios swift xcode alamofire urlsession


    【解决方案1】:

    用 URLSession 试试这个

    // create a `URLRequest` because post are urlRequest used with  urlSession.shared.uploadTask
    var request = URLRequest(url: url) 
    
    // here pass in data format the body of the request
    request.httpBody = body 
    
    // the request method.
    request.httpMethod = "post" 
    
    // required when send a json type in request
    request.setValue("application/json", forHTTPHeaderField: "Content-Type") 
    
    URLSession.shared.uploadTask(with: request, from: nil) { (data, response, error) in
        let response = (response as? HTTPURLResponse)?.statusCode
        if (response! == 500 ){
            print("error")
        }
        print("request made")    
    }.resume()
    

    【讨论】:

      【解决方案2】:

      我不知道为什么,但请确保您发送的是 https 请求(不是 http)。

      【讨论】:

      • 请添加更多关于为什么 https 可以工作而不是 http 的上下文。
      猜你喜欢
      • 2015-06-11
      • 1970-01-01
      • 2014-02-08
      • 2017-06-28
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 2018-10-29
      相关资源
      最近更新 更多