OctoberHammer
5/17/2017 - 10:20 AM

cutl into Alamofire

cutl into Alamofire


#Есть HTTP-запрос, который выполняется например из терминала

##Request

-X GET -H "Content-Type: application/x-www-form-urlencoded" -H "X-Parse-Application-Id: ad383bxkAmwAgKgPEqZHjewleWi2bLmNTlctBuky" -H "X-Parse-Master-Key: qTJ3eatgZppvAWqkb82WsCoqG9MqRog2MBXqRHHv" -d "where={\"parentID\":{\"\$exists\":false}}" https://parseapi.back4app.com/classes/category

#Пруф:
https://www.dropbox.com/s/qd0fkay5nnvf4bc/Terminal.png?dl=0

#Или например из программки Paw, которая может создавать, отлаживать, исполнять и конвертировать HTTP-запросы в различные форматы.

## Request
curl "https://parseapi.back4app.com/classes/category" \
     -H "X-Parse-Master-Key: qTJ3eatgZppvAWqkb82WsCoqG9MqRog2MBXqRHHv" \
     -H "X-Parse-Application-Id: ad383bxkAmwAgKgPEqZHjewleWi2bLmNTlctBuky" \
     -H "Content-Type: application/x-www-form-urlencoded; charset=utf-8" \
     --data-urlencode "where={\"parentID\":{\"$exists\"}}"
     
     
# Пруф:

https://www.dropbox.com/s/mnoo9nxt30c5nhy/Untitled_Paw_Document_and_MyRequestController_swift.png?dl=0

# Эта программка конвертирует этот запрос в такой вот коротенький и элегантный как на мой взгляд Swift-код:

///////////////
/// SWift+Alamofire

func sendRequestRequest() {
	/**
	Request
	get https://parseapi.back4app.com/classes/category
	*/
	
	// Add Headers
	let headers = [
		"X-Parse-Master-Key":"qTJ3eatgZppvAWqkb82WsCoqG9MqRog2MBXqRHHv",
		"X-Parse-Application-Id":"ad383bxkAmwAgKgPEqZHjewleWi2bLmNTlctBuky",
		"Content-Type":"application/x-www-form-urlencoded; charset=utf-8",
		]
	
	// Form URL-Encoded Body
	let body = [
		"where":"{\"parentID\":{\"$exists\"}}",
		]
	
	// Fetch Request
	Alamofire.request("https://parseapi.back4app.com/classes/category", method: .get, parameters: body, encoding: URLEncoding.default, headers: headers)
		.validate(statusCode: 200..<300)
		.responseJSON { response in
			if (response.result.error == nil) {
				debugPrint("HTTP Response Body: \(response.data)")
			}
			else {
				debugPrint("HTTP Request failed: \(response.result.error)")
			}
	}
}



# Но выполнение этого кода приводит к вот такой ошибке:

"HTTP Request failed: Optional(Alamofire.AFError.responseValidationFailed(Alamofire.AFError.ResponseValidationFailureReason.unacceptableStatusCode(500)))"



У меня большое подозрение что 

--data-urlencode "where={\"parentID\":{\"$exists\"}}" переведено неправильно в 
	let body = [
		"where":"{\"parentID\":{\"$exists\"}}",
		]
        
 
 
 
 Если убрать и из curl и из Alamofire ограничение (условие), типа вот так:
 
 func sendRequestRequest() {
	/**
	Request
	get https://parseapi.back4app.com/classes/category
	*/
	
	// Add Headers
	let headers = [
		"X-Parse-Master-Key":"qTJ3eatgZppvAWqkb82WsCoqG9MqRog2MBXqRHHv",
		"X-Parse-Application-Id":"ad383bxkAmwAgKgPEqZHjewleWi2bLmNTlctBuky",
		"Content-Type":"application/x-www-form-urlencoded; charset=utf-8",
		]
	
	// Form URL-Encoded Body
	let body: [String:Any?] = [:]
//		"where":"{\"parentID\":{\"$exists\"}}",
//		]
	
	// Fetch Request
	Alamofire.request("https://parseapi.back4app.com/classes/category", method: .get, parameters: body, encoding: URLEncoding.default, headers: headers)
		.validate(statusCode: 200..<300)
		.responseJSON { response in
			if (response.result.error == nil) {
				debugPrint("HTTP Response Body: \(response.data)")
			}
			else {
				debugPrint("HTTP Request failed: \(response.result.error)")
			}
	}
}



То запрос выполняется, и получает данные