在任何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
答案 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
,因此可以省略它们以减少语法噪音。
顺便说一句,如果您对GET
和POST
之间的区别(这驱动了Web服务API开发人员使用的原理)感兴趣,请参阅HTTP规范中的“方法”的讨论。 ,例如GET与POST。