Cloud Function HTTP 请求参数在“&”处拆分
Cloud Function HTTP Request parameter being split up at "&"
我正在尝试进行一个 Firebase 云函数调用,该调用传递一个参数,该参数是特定 url 的字符串表示形式。在大多数情况下,我让我的 Cloud Function 使用 var somePath = req.query.somePath;
获取参数,并使用这些变量执行我想要的所有逻辑。但是,url 包含 ?
和 &
符号,我认为这可能会使 Alamofire 感到困惑,认为 &
之后的数据是它自己传递的参数。
我的尝试
let somePath = "https://www.somewebsite.com/someSubpath?firstID=firstValue&someID=someValue"
let url = "https://us-central1-[myProjectName].cloudfunctions.net/myfunction?somePath=" + somePath + "&someData=" + someData
Alamofire.request(url, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON {
response in
print("original URL request")
print(response.request as Any) // original URL request
print("URL response")
print(response.response as Any) // URL response
print(response.response?.statusCode ?? "response.response?.statusCode is nil")
}
我猜测 somePath
中的 &
导致 someID
被视为另一个参数,所以我的
云函数认为 somePath
=
https://www.somewebsite.com/someSubpath?firstID=firstValue
但应该是=
https://www.somewebsite.com/someSubpath?firstID=firstValue&someID=someValue
带着这个猜测,我接着尝试
变化:
Alamofire.request(url, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON {
收件人:
Alamofire.request(url, method: .post, parameters: ["somePath": somePath ?? ""], encoding: JSONEncoding.default, headers: nil).responseJSON {
但这只会导致另一个错误,即 somePath
没有作为参数传递。
有谁知道我怎样才能防止 somePath
被拆分,尽管里面有 ?
和 &
?
如果你想通过查询参数发送数据,你应该使用查询编码而不是像
那样的json
let somePath = "https://www.somewebsite.com/someSubpath?firstID=firstValue&someID=someValue"
let parameters = ["somePath":somePath,"someData":"someData"]
let url = "https://us-central1-myProjectName.cloudfunctions.net/myfunction"
Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.queryString, headers: nil).responseJSON {
response in
Helper.shared.log(for: response)
print("original URL request")
print(response.request as Any) // original URL request
print("URL response")
print(response.response as Any) // URL response
print(response.response?.statusCode ?? "response.response?.statusCode is nil")
}
Alamofire 将处理所有必需的转义字符。
我正在尝试进行一个 Firebase 云函数调用,该调用传递一个参数,该参数是特定 url 的字符串表示形式。在大多数情况下,我让我的 Cloud Function 使用 var somePath = req.query.somePath;
获取参数,并使用这些变量执行我想要的所有逻辑。但是,url 包含 ?
和 &
符号,我认为这可能会使 Alamofire 感到困惑,认为 &
之后的数据是它自己传递的参数。
我的尝试
let somePath = "https://www.somewebsite.com/someSubpath?firstID=firstValue&someID=someValue"
let url = "https://us-central1-[myProjectName].cloudfunctions.net/myfunction?somePath=" + somePath + "&someData=" + someData
Alamofire.request(url, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON {
response in
print("original URL request")
print(response.request as Any) // original URL request
print("URL response")
print(response.response as Any) // URL response
print(response.response?.statusCode ?? "response.response?.statusCode is nil")
}
我猜测 somePath
中的 &
导致 someID
被视为另一个参数,所以我的
云函数认为 somePath
=
https://www.somewebsite.com/someSubpath?firstID=firstValue
但应该是=
https://www.somewebsite.com/someSubpath?firstID=firstValue&someID=someValue
带着这个猜测,我接着尝试 变化:
Alamofire.request(url, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON {
收件人:
Alamofire.request(url, method: .post, parameters: ["somePath": somePath ?? ""], encoding: JSONEncoding.default, headers: nil).responseJSON {
但这只会导致另一个错误,即 somePath
没有作为参数传递。
有谁知道我怎样才能防止 somePath
被拆分,尽管里面有 ?
和 &
?
如果你想通过查询参数发送数据,你应该使用查询编码而不是像
那样的jsonlet somePath = "https://www.somewebsite.com/someSubpath?firstID=firstValue&someID=someValue"
let parameters = ["somePath":somePath,"someData":"someData"]
let url = "https://us-central1-myProjectName.cloudfunctions.net/myfunction"
Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.queryString, headers: nil).responseJSON {
response in
Helper.shared.log(for: response)
print("original URL request")
print(response.request as Any) // original URL request
print("URL response")
print(response.response as Any) // URL response
print(response.response?.statusCode ?? "response.response?.statusCode is nil")
}
Alamofire 将处理所有必需的转义字符。