我无法在任何api中的swift项目的后期请求中以正文中的数据发送正文

时间:2019-09-04 11:55:15

标签: swift

在任何api的swift项目的后期请求中,我都无法在正文中发送数据。如果我发送添加网址的日期,则api会响应。

let url: String = "https://maps.googleapis.com/maps/api/place/autocomplete/json" 
let para = ["key":googlekey, "components":"country:ids", "input":str, "types": "address"] 
Alamofire.request(url, method: .post,parameters: para, encoding: JSONEncoding.default, headers: nil)
    .responseJSON { dataResponse in

2 个答案:

答案 0 :(得分:2)

因此,据我所知,您正在使用Google Maps API,而您要执行的请求是GET请求,这意味着您需要在URL本身而不是主体中指定请求参数。我认为您的要求应该是这样

    let googleKey = "your api key"
    let url: String = "maps.googleapis.com/maps/api/place/autocomplete/json?input=Apple&components=country:ids&input=\(str)&types=adress&key=\(googleKey)"
    Alamofire.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON

希望这会有所帮助。

答案 1 :(得分:0)

您说:

  

在任何api的swift项目的后期请求中,我都无法在正文中发送数据。

是的。

根据定义,GET请求是从Web服务请求信息(URL中提供了参数),POST是向Web服务提供信息(并且信息被存储在请求的正文中)。对Google Places API的搜索请求只是从其Web服务请求信息,而不存储任何内容,因此这是一个GET请求。

documentation for Place Autocomplete明确指出,这些参数应仅包含在请求的URL中:

  

“地点自动完成”请求是以下形式的HTTP URL:

https://maps.googleapis.com/maps/api/place/autocomplete/output?parameters
     

其中output可能是以下值之一:

     
      
  • json(推荐)指示以JavaScript对象表示法(JSON)输出
  •   
  • xml表示输出为XML
  •   
     

...

最重要的是,我建议您让Alamofire构建此GET请求,为您的URL添加参数(为您完成所有转义的百分比):

Alamofire.request(url, parameters: para)   // or, in Alamofire 5, `AF.request(...)`
    .responseJSON { response in
        ...
}

method的默认值是.get,而encoding的默认值是URLEncoding.default,因此可以省略它们以减少语法噪音。


顺便说一句,如果您对GETPOST之间的区别(这驱动了Web服务API开发人员使用的原理)感兴趣,请参阅HTTP规范中的“方法”的讨论。 ,例如GETPOST