通过邮递员和URLSession获取的数据在此处http://173.249.20.137:9000/apiapp/coupon中有所不同

时间:2019-09-10 07:23:19

标签: swift postman urlsession

http://173.249.20.137:9000/apiapp/coupon GET方法。

当我通过URLSession和Postman请求时,得到两个不同的结果。实际上,邮递员数据是正确的,但是无论我添加还是删除不打算更新的数据,URL会话始终具有相同的响应。任何人都可以看看。如果这只是我自己发生或后端服务器出现问题。

我已经使用URLSession.shared和postman测试了请求数据。

我实际上也希望通过URLSession请求也可以通过邮递员获得数据。

   func getAvailableCoupons(urlString:String, completion: @escaping (_ 
    product: Any, _ error: Error?) -> Void){
    guard let url = URL(string: urlString) else {return}
   let task = URLSession.shared.dataTask(with: url) { (data, response, 
 error) in
        let jsonDecoder = JSONDecoder()
        guard let dataResponse = data,
            error == nil else {
                print(error?.localizedDescription ?? "Response Error")
                return }

        let statusCode = (response as! HTTPURLResponse).statusCode

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

            if statusCode == 200 {
                do {
                    let jsonData = try JSONSerialization.data(withJSONObject: responseJSON, options: [])
                    let responseData = try jsonDecoder.decode(CoupensResponseModel.self, from:jsonData)
                    completion(responseData, nil)

                } catch let error {
                    print("error when parshing json response \(error)")
                    completion(error, nil )
                }

            } else if statusCode == 404{
                completion(" 404 not found", nil )

            } else {
                print("fatal error \(error?.localizedDescription ?? "big errror")")
            }
        }

    }
    task.resume()



}





  import Foundation

 // MARK: - CoupensResponseModel
 struct CoupensResponseModel: Codable {
 let couponDetails: [CouponDetail]?
   enum CodingKeys: String, CodingKey {
    case couponDetails = "coupon_details"
     }
   }

// MARK: - CouponDetail
 struct CouponDetail: Codable {
let id: Int?
let vouchersusageSet: [VouchersusageSet]?
let couponCode: String?
let minimumSpend: Int?
let expiryDate, createdDate: String?
let discountPrice, discountPercent: Int?
let discountBasis: DiscountBasis?
let couponImage: String?
let couponType: String?

enum CodingKeys: String, CodingKey {
    case id
    case vouchersusageSet = "vouchersusage_set"
    case couponCode = "coupon_code"
    case minimumSpend = "minimum_spend"
    case expiryDate = "expiry_date"
    case createdDate = "created_date"
    case discountPrice = "discount_price"
    case discountPercent = "discount_percent"
    case discountBasis = "discount_basis"
    case couponImage = "coupon_image"
    case couponType = "coupon_type"
     }
  }

   enum DiscountBasis: String, Codable {
case amount = "amount"
case percent = "percent"
      }

   // MARK: - VouchersusageSet
  struct VouchersusageSet: Codable {
let id: Int?
let itemObj: ItemObj?
let voucherObj: Int?
let sectionObj, categoryObj: Int?
         }

    // MARK: - ItemObj
     struct ItemObj: Codable {
  let id: Int?
let code, productName: String?
let productPrice, discountedPrice: Int?
let productDescription, itemImage: String?
let categoryObj: CouponCategoryObj?

   enum CodingKeys: String, CodingKey {
    case id, code
    case productName = "product_name"
    case productPrice = "product_price"
    case discountedPrice = "discounted_price"
    case productDescription = "product_description"
    case itemImage = "item_image"
    case categoryObj
      }
   }

  // MARK: - CouponCategoryObj
  struct CouponCategoryObj: Codable {
let id: Int?
let categoryCode, categoryName: String?
let categoryImage: CouponJSONNull?
let sectionObj: Int?

  enum CodingKeys: String, CodingKey {
    case id
    case categoryCode = "category_code"
    case categoryName = "category_name"
    case categoryImage = "category_image"
    case sectionObj
}
  }

// MARK:-编码/解码助手

  class CouponJSONNull: Codable, Hashable {

public static func == (lhs: CouponJSONNull, rhs: CouponJSONNull) -> 
   Bool {
    return true
}

public var hashValue: Int {
    return 0
}

public func hash(into hasher: inout Hasher) {
    // No-op
}
public init() {}

    public required init(from decoder: Decoder) throws {
    let container = try decoder.singleValueContainer()
    if !container.decodeNil() {
        throw DecodingError.typeMismatch(CouponJSONNull.self, 
      DecodingError.Context(codingPath: decoder.codingPath, 
     debugDescription: 
      "Wrong type for CouponJSONNull"))
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.singleValueContainer()
    try container.encodeNil()
   }
}

2 个答案:

答案 0 :(得分:1)

尝试以下方法

let headers = [
    "Cache-Control": "no-cache",
]

let request = NSMutableURLRequest(url: NSURL(string: "http://173.249.20.137:9000/apiapp/coupon")! as URL,
                                  cachePolicy: .useProtocolCachePolicy,
                                  timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
    if (error != nil) {
        print(error)
    } else {
        let string = String(data: data!, encoding: .utf8) ?? ""
        print(string)
    }
})
dataTask.resume()

答案 1 :(得分:0)