ios - 发送 Http Post 请求在 IoS 中返回 500 状态码

标签 ios swift post https request

我正在尝试在 Http Post 请求中发送 NSData 类型的 Receipt 数据(转换为字符串)和其他几个类型为 String 的参数。

func receiptValidation(productId:String)
    {

             let SUBSCRIPTION_SECRET = My_SecretKey
             let defaults = UserDefaults.standard
             let receiptPath = Bundle.main.appStoreReceiptURL?.path
             if FileManager.default.fileExists(atPath: receiptPath!){
                 var receiptData:NSData?
                 do{
                     receiptData = try NSData(contentsOf: Bundle.main.appStoreReceiptURL!, options: NSData.ReadingOptions.alwaysMapped)
                 }
                 catch{
                     print("ERROR: " + error.localizedDescription)
                 }
                 let receiptString = receiptData?.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
                // let base64encodedReceipt = receiptData?.base64EncodedString(options: NSData.Base64EncodingOptions.endLineWithCarriageReturn)
           let requestDictionary = ["receipt-data":receiptString!,"password":SUBSCRIPTION_SECRET]

                 guard JSONSerialization.isValidJSONObject(requestDictionary) else {  print("requestDictionary is not valid JSON");  return }
                 do {

                     let requestData = try JSONSerialization.data(withJSONObject: requestDictionary)
                   let requestDataString = NSString(data: requestData, encoding: String.Encoding.utf8.rawValue)

                    //https://<apiProxyServer>:<apiProxyServerPort>/api/validate-receipt-data

                    let URLForApplication:String = String(format:"%@/api/validate-receipt-data",opcodeDetails["apiProxyBaseUrl"]!)  // this works but as noted above it's best to use your own trusted server
                     let url:URL! = URL.init(string: URLForApplication)
                    var request = URLRequest.init(url: url)
                     request.httpMethod = "POST"
                     let configure = URLSessionConfiguration.background(withIdentifier: Bundle.main.bundleIdentifier!)
                    var postString:[String:Any]=[
                        "receiptData": requestDataString
                        "deviceType":"IOS",
                        "subscriberId":encodeString(normalString: defaults.array(forKey: "userDetails")?.first as! String),
                        "password":encodeString(normalString: defaults.array(forKey: "userDetails")?.last as! String),
                        "productId":encodeString(normalString: productId),
                        "code":opcodeDetails["opCode"]!
                    ]
                     do {
                       let receiptData = try JSONSerialization.data(withJSONObject: postString)
                         request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
                        request.httpBody = receiptData
                       } catch let error {
                           print(error.localizedDescription)
                       }
                let session = URLSession(configuration:configure,
                                          delegate:applicationDelegate.application,
                                          delegateQueue:OperationQueue.main)
                    session1 = session

                 let connection = session1?.dataTask(with: request)

                 connection?.resume()

                 } catch let error as NSError {
                     print("json serialization failed with error: \(error)")
                 }

             }

    }

其中encodeString()是定义好的方法

func encodeString(normalString:String) -> String {

        let allowedCharacters = CharacterSet.letters

        let encodedString:String!=normalString.addingPercentEncoding(withAllowedCharacters: allowedCharacters)

        return encodedString

    }

服务器端没有问题。但是我无法获得成功响应我得到的是 {"status":"failure","statusCode":500,"message":"Resource url not找到了!”。我在使用这段代码时犯了什么错误?有人请帮助我。在此先感谢。

最佳答案

尝试在 URL 末尾附加 '/'

例如: google.com/api/postgoogle.com/api/post/ 是不同的,尾部斜线有时会给出 500 错误,如果是 Django-Backend,它会。

关于ios - 发送 Http Post 请求在 IoS 中返回 500 状态码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59421189/

相关文章:

iPhone 应用程序崩溃与 [NSObject(NSObject) doesNotRecognizeSelector :]

ios - 以编程方式对水平居中元素进行偏移

javascript - 发送带有 Action ="mailto:"的表单时, body 的大小是否有某种限制?

javascript - HTML 表单的某些部分未通过 POST 发送

ios - UIButton不在按钮内显示完整图像

objective-c - 如何在 Objective C 中实现 mixin 或 Trait 类型的行为?

ios - 我在 iMessage 中的应用程序 UIActivityViewController

swift - 自定义 tableViewCell 高度

json - Alamofire - 使用 JSON 给出 301 的 POST 请求

spring - RestTemplate, Spring boot , POST