I have a working scenario using Postman passing in URL parameters. Now when I try to do it via Alamofire in Swift, it does not work.
How would you create this url in Alamofire? http://localhost:8080/?test=123
_url = "http://localhost:8080/" let parameters: Parameters = [ "test": "123" ] Alamofire.request(_url, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: headers
For headers that change from request to request, you can pass them directly to the request method. From the docs: Adding a custom HTTP header to a Request is supported directly in the global request method. This makes it easy to attach HTTP headers to a Request that can be constantly changing.
Networking in Alamofire is done asynchronously. Asynchronous programming may be a source of frustration to programmers unfamiliar with the concept, but there are very good reasons for doing it this way.
The URLRequestConvertible protocol is a lightweight way to ensure a given object can create a valid NSURLRequest . There's not really a strict set of rules or guidelines that exist forcing you to use this protocol in any particular way.
The problem is that you're using URLEncoding.default
. Alamofire interprets URLEncoding.default
differently depending on the HTTP method
you're using.
For GET
, HEAD
, and DELETE
requests, URLEncoding.default
encodes the parameters as a query string and adds it to the URL, but for any other method (such as POST
) the parameters get encoded as a query string and sent as the body of the HTTP request.
In order to use a query string in a POST
request, you need to change your encoding
argument to URLEncoding(destination: .queryString)
.
You can see more details about how Alamofire handles request parameters here.
Your code should look like:
_url = "http://localhost:8080/" let parameters: Parameters = [ "test": "123" ] Alamofire.request(_url, method: .post, parameters: parameters, encoding: URLEncoding(destination: .queryString), headers: headers)
If you want your parameters to be used in querystring, use .queryString as URLEncoding, as in: (I assume you have headers somewhere)
let _url = "http://localhost:8080/" let parameters: Parameters = [ "test": "123" ] Alamofire.request(_url, method: .post, parameters: parameters, encoding: URLEncoding.queryString, headers: headers)
This form is suggested by Alamofire author because it's more coincise to the other, see screenshot:
See original here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With