我能';在任何api中,在swift项目的post请求中,在body中发送body in数据

我能';在任何api中,在swift项目的post请求中,在body中发送body in数据,swift,Swift,我不能在任何api的swift项目的post请求中发送正文中的数据。如果我将日期发送到加载项url,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(ur

我不能在任何api的swift项目的post请求中发送正文中的数据。如果我将日期发送到加载项url,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

因此,正如我正确理解的,您使用的是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
希望这会有所帮助。

你说:

我不能在任何api的swift项目的post请求中发送正文中的数据

这是正确的

根据定义,
GET
请求是从web服务请求信息(其中参数在URL中提供),而
POST
是向web服务提供信息(要存储的信息在请求主体中提供)。对Google Places API的这个搜索请求只是从他们的web服务请求信息,而不是存储任何内容,因此这是一个
GET
请求是合适的

很明显,这些参数只应包含在请求的URL中:

位置自动完成请求是以下形式的HTTP URL:

https://maps.googleapis.com/maps/api/place/autocomplete/output?parameters
其中,
输出
可以是以下值之一:

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

总之,我建议您让Alamofire构建这个
GET
请求,为您的URL添加参数(为您完成所有百分比转义):

方法
默认为
.get
,而
编码
默认为
URLEncoding.default
,因此可以省略它们以减少语法噪音



顺便说一下,如果您对
GET
POST
之间的区别感兴趣(这是web服务API开发人员使用的基本原理),请参阅HTTP规范中关于“方法”的讨论,例如vs.

Hi,很高兴看到代码。这将有助于更好地理解问题。let url:String=”“let para=[“key”:googlekey,“components”:“country:ids”,“input”:str,“types”:“address”]Alamofire.request(url,method:.post,para,encoding:JSONEncoding.default,headers:nil)。responseJSON{dataResponse in请将您的代码作为问题的一部分进行共享。这样,我们就可以更好地理解您的问题。我正在为我们的服务器使用相同的代码发布api,但服务器没有响应,而是使用旧project server响应(旧项目中使用了AfnerWorking和objective c)
Alamofire.request(url, parameters: para)   // or, in Alamofire 5, `AF.request(...)`
    .responseJSON { response in
        ...
}