【问题标题】:Cloud Function HTTP Request parameter being split up at "&"Cloud Function HTTP 请求参数在“&”处拆分
【发布时间】:2017-07-10 08:01:40
【问题描述】:

我正在尝试进行 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 被拆分,尽管其中有?&

【问题讨论】:

    标签: node.js swift firebase alamofire google-cloud-functions


    【解决方案1】:

    如果你想通过查询参数发送数据,你应该使用查询编码而不是像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 将处理所有必需的转义字符。

    【讨论】:

    • 工作就像一个魅力!这很有意义。非常感谢。
    猜你喜欢
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2021-03-06
    • 1970-01-01
    相关资源
    最近更新 更多