Невозможно опубликовать параметры в запросе на публикацию ios swift - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь отправить эти параметры в виде запроса на URL-адрес, но параметры не отправляются.Я не знаю, является ли URLSession проблема конфигурации.Кто-нибудь может проверить и решить проблему?

import UIKit

let json: [String: Any] = [
    "set_id" : "20",
    "user_id" :  "30",
    "type" : "contact",
    "contact_name" : "shinto"
]

let jsonData = try? JSONSerialization.data(withJSONObject: json)

var str = String(data: jsonData!, encoding: .utf8)

let url = URL(string: "****.php")!
var request = URLRequest(url: url)

request.httpMethod = "Post"
request.httpBody = str!.data(using: .utf8)

let session = URLSession(configuration: .default)
let task = session.dataTask(with: request) {

  (data, response, error) in
    if let data = data {
      if let postResponse = String(data: data, encoding: .utf8) {
        print(postResponse)
      }
    }

}
task.resume()

Ответы [ 3 ]

1 голос
/ 29 апреля 2019

Я использовал онлайн-сервис RequestBin для проверки вашего запроса, и данные, похоже, отправлены правильно.Я только внес незначительные изменения, как уже упоминалось в комментарии.

Это был полученный код:

let json: [String: Any] = [
    "set_id" : "20",
    "user_id" :  "30",
    "type" : "contact",
    "contact_name" : "shinto"
]
let jsonData = try! JSONSerialization.data(withJSONObject: json)

let url = URL(string: "http://requestbin.fullcontact.com/***")! // Was "using"
var request = URLRequest(url: url)

request.httpMethod = "POST" // Was "Post"
request.httpBody = jsonData // Was utf8 string representation

let session = URLSession(configuration: .default)
let task = session.dataTask(with: request) {
    (data, response, error) in
    if let data = data {
        if let postResponse = String(data: data, encoding: .utf8) {
            print(postResponse)
        }
    }

}
task.resume()

Вы можете проверить проверенный результат, используя этот сервис .Вы просто создаете новый URL и используете его в своем запросе.После того, как вы успешно отправили запрос, все, что вам нужно сделать, это перезагрузить страницу для проверки вашего запроса.

Обратите внимание, что это запросы "http", поэтому вам нужно разрешить произвольные загрузки .

1 голос
/ 29 апреля 2019

Проверьте это:

      func post method(){
      let headers = [
        "Content-Type": "application/json",
        "cache-control": "no-cache"]


    let parameters = ["set_id" : "20",
                      "user_id" :  "30",
                      "type" : "contact",
                      "contact_name" : "shinto"] as [String : Any]



    let postData = try? JSONSerialization.data(withJSONObject: parameters, options: [])

    let url = URL(string: "****.php")!
    var request = URLRequest(url: url)

    request.httpMethod = "POST"
    request.allHTTPHeaderFields = headers
    request.httpBody = postData as! Data

    let session = URLSession.shared
    let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
        if (error != nil) {
            print(error)
        }
        guard let httpresponse = response as? HTTPURLResponse,
            (200...299).contains(httpresponse.statusCode) else {
                print ("server error")
                return
        }


        if let mimeType = response?.mimeType,
            mimeType == "application/json",
            let data = data,
            let dataString = String(data: data, encoding: .utf8) {
            print ("got data: \(dataString)")

     }
     }
    })

    dataTask.resume()

}
0 голосов
/ 29 апреля 2019

Вы можете установить свой запрос следующим образом и изменить тип контента в соответствии с вашими потребностями

import UIKit    
let json: [String: Any]? = [
    "set_id" : "20",
    "user_id" :  "30",
    "type" : "contact",
    "contact_name" : "shinto"
]
let url = URL(string: "****.php")!
var request = URLRequest(url: url)
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
if let parameters = json
{
    self.makeParamterString(request: request, parameterDic: parameters)
}

let session = URLSession(configuration: .default)
let task = session.dataTask(with: request) {

  (data, response, error) in
    if let data = data {
      if let postResponse = String(data: data, encoding: .utf8) {
        print(postResponse)
      }
    }

}
task.resume()
     static  func makeParamterString(request:NSMutableURLRequest, parameterDic:[String:AnyObject])
    {
        let _ =  NSCharacterSet(charactersIn:"=\"#%/<>?@\\^`{|}").inverted
        var dataString = String()
        for (key, value) in parameterDic {
            dataString = (dataString as String) + ("&\(key.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)=\(value)")
        }
        dataString = dataString.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!
        request.httpBody = dataString.data(using: String.Encoding.utf8)
    }
...