Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios swift中的URL编码_Ios_Iphone_Swift_Swift3 - Fatal编程技术网

Ios swift中的URL编码

Ios swift中的URL编码,ios,iphone,swift,swift3,Ios,Iphone,Swift,Swift3,请帮我在Swift 3上做同样的 curl -X POST -d MD='44586989' -d TermUrl='https://proil.moscow/' --data-urlencode 'PaReq=+/eyJNZXJjaGFudE5hbWUiOm51bGwsIkZpcnN0U2l4IjoiNDI3NjM4IiwiTGFzdEZvdXIiOiIxMTQ1IiwiQW1vdW50IjoxMDM0LjAwLCJDdXJyZW5jeUNvZGUiOiJSVUIiLCJEYXRlIjoiMj

请帮我在Swift 3上做同样的

curl -X POST -d MD='44586989' -d TermUrl='https://proil.moscow/' --data-urlencode 'PaReq=+/eyJNZXJjaGFudE5hbWUiOm51bGwsIkZpcnN0U2l4IjoiNDI3NjM4IiwiTGFzdEZvdXIiOiIxMTQ1IiwiQW1vdW50IjoxMDM0LjAwLCJDdXJyZW5jeUNvZGUiOiJSVUIiLCJEYXRlIjoiMjAxOC0wMy0yNlQwMDowMDowMCswMzowMCIsIkN1c3RvbWVyTmFtZSI6bnVsbCwiQ3VsdHVyZU5hbWUiOiJydS1SVSJ9' https://demo.cloudpayments.ru/acs
我试试这个:

 var request = URLRequest(url: URL(string: acsUrlString)!)
    request.httpMethod = "POST"
    let session = URLSession.shared


    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    let d = String("PaReq=" + pareq + "&MD=" + String(Int(transactionId)) +  "&TermUrl=https://proil.moscow").data(using:String.Encoding.ascii, allowLossyConversion: false)
    request.httpBody = d
其中,不带编码的d=
PaReq=+/eyjnzxjjagfude5HBWuIOM51BGWSIKZPCNN0U2L4IJINDI3Nj4IIWITzDzVdXIIOIIXMTq1IWIQW1VDW50IjOxMDM0LjawlcjDxJyZW5JeunvuIjJwJuIjVuIzIjAxOc0YWm0YNqLqWmWnqLqLqLqWbWvVvYZU5HBWuIoIjIjIjIjIjIjW9LjJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ=https://proil.moscow

所以这段代码给出的结果与

curl -X POST -d MD='44586989' -d TermUrl='https://proil.moscow/' -d PaReq='+/eyJNZXJjaGFudE5hbWUiOm51bGwsIkZpcnN0U2l4IjoiNDI3NjM4IiwiTGFzdEZvdXIiOiIxMTQ1IiwiQW1vdW50IjoxMDM0LjAwLCJDdXJyZW5jeUNvZGUiOiJSVUIiLCJEYXRlIjoiMjAxOC0wMy0yNlQwMDowMDowMCswMzowMCIsIkN1c3RvbWVyTmFtZSI6bnVsbCwiQ3VsdHVyZU5hbWUiOiJydS1SVSJ9' https://demo.cloudpayments.ru/acs

我从服务器cloudpayments得到这样的响应:“检查PaReq参数中的“+”符号。”,

谢谢你,Rob,这对我很有帮助

request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
request.httpBody = postParameters.map { key, value in
   let keyString = key.addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed)!
   let valueString = (value as! String).addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed)!
   return keyString + "=" + valueString
}.joined(separator: "&").data(using: .utf8)
和扩展

extension CharacterSet {

static var urlQueryValueAllowed: CharacterSet = {
    let generalDelimitersToEncode = ":#[]@" // does not include "?" or "/" due to RFC 3986 - Section 3.4
    let subDelimitersToEncode = "!$&'()*+,;="

    var allowed = CharacterSet.urlQueryAllowed
    allowed.remove(charactersIn: generalDelimitersToEncode + subDelimitersToEncode)

    return allowed
}()
}

请向社区提供您所面临的任何错误或问题,如果没有这些错误或问题,很难猜测失败的地方。@StefanCrain我从服务器cloudpayments得到以下响应:“检查PaReq参数中的“+”符号”。您必须对添加到POST请求正文中的值进行百分比编码。例如。值得注意的是,
+
字符可能会有问题,因为大多数web服务根据
x-www-form-urlencoded
规范将它们替换为空格字符。@MiKa您使用UIWebView和WKWebView做什么?