Reputation: 33
Request code:
static func testRequest() {
Alamofire.request(Constants.baseURL,
method: .get,
parameters: ["data": "contentperson son"]).response { response in
print("Request: \(response.request)")
print("Response: \(response.response)")
print("Error: \(response.error)")
if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
print("Data: \(utf8Text)")
}
}
}
Source: Github ReadMe for Alamofire
I'm having trouble. The request should use data: contentperson son
as the request body but it doesn't seem to be. I am NOT returning a JSON
object. The connection is 100% made with the server but it doesn't seem to understand my request. A python program to send this request DOES return information.
Request returns:
Request: Optional(URL?data=contentperson%20son)
Response: Optional(<NSHTTPURLResponse: 0x600000833dc0> { URL: URL?data=contentperson%20son } { Status Code: 200, Headers {
Connection = (
"keep-alive"
);
"Content-Encoding" = (
gzip
);
"Content-Type" = (
"text/html; charset=utf-8"
);
Date = (
"Wed, 18 Jul 2018 16:58:48 GMT"
);
Server = (
"nginx/1.10.3 (Ubuntu)"
);
"Transfer-Encoding" = (
Identity
);
"X-Frame-Options" = (
SAMEORIGIN
);
} })
Error: nil
Data: The request data is empty.
It is connecting to a Django server with request function:
def Hello(request):
if(request.method == "GET"):
data = request.body
decoded_data = data.decode("utf-8")
if(decoded_data == ''):
return HttpResponse("The request data is empty.")
decoded_data = decoded_data.split(" ")
#decoded_data[0] is the model type (contentmedia, contenttext, contentperson, contentsite), decoded_data[1] is keyword
try:
connected_database = sqlite3.connect('db.sqlite3')
c = connected_database.cursor()
c.execute("select * from dataentry_" + decoded_data[0] + " where title like ('%" + decoded_data[1] + "%')")
connected_database.commit()
results = c.fetchall()
except:
return HttpResponse("Error in reading the database.")
return HttpResponse(str(results))
Upvotes: 2
Views: 1492
Reputation: 451
Try this ...
Alamofire.request(url)
.responseJSON { (response:DataResponse<Any>) in
switch(response.result) {
case .success(_):
break
case .failure(_):
break
}
}
Upvotes: 0
Reputation: 723
I don't use Alamofire, but I assume the swift script is working fine. To be certain test with a direct request, something like:
let url = "http://...?..."
if let myUrl = URL(string: url)
{
URLSession.shared.dataTask(with: myUrl)
{
(data, response, err) in
if let data = data
{
let dataString = String(data: data, encoding: .utf8)
...
}
}.resume()
}
Like Lame said a GET request is simply a URL including a query (?...). A POST request is used when there is a HttpBody. A common use is to send sensitive information -such as a password, usually parameters are sent like the with a GET query (eg. x=23&y=45&z=elephant...)
So I guess there's an issue with the DJANGO logic. Also I am not familiar, but request.body
seems to be wrong for a GET request. (Test for its absence in a POST request would be correct, though). I guess you want to parse the query...
Upvotes: 1