1
我有下面的代碼,我試圖發送一個API請求。IOS Swift發佈請求從身份驗證和數據形式
當我通過bash運行下面的代碼時,我得到了一個創建的響應。但是,當我試圖將其轉換爲swift並運行代碼時,API會拒絕我的代碼。
有什麼想法?
HTTP -a邁克:密碼POST http://mybudget-env.hnfarjj5iy.ap-southeast-2.elasticbeanstalk.com/api/transactions/量= 1000 USER =麥克描述= test1的
HTTP/1.1 201 Created
Allow: GET, POST, HEAD, OPTIONS
Connection: keep-alive
Content-Type: application/json
Date: Sun, 04 Sep 2016 10:45:39 GMT
Server: Apache/2.4.23 (Amazon) mod_wsgi/3.5 Python/2.7.10
Vary: Accept,Cookie
X-Frame-Options: SAMEORIGIN
transfer-encoding: chunked
{
"amount": "1000",
"created": "2016-09-04T10:45:39.432369Z",
"description": "test1",
"id": 18,
"owner": 2
}
我viewcontroller.swift
import UIKit
class PostController: UIViewController {
@IBOutlet weak var firstname: UITextField!
@IBOutlet weak var lastname: UITextField!
@IBOutlet weak var instrument: UITextField!
@IBOutlet weak var test: UITextField!
@IBAction func buttonPost(sender: UIButton) {
print(postForm("amount=" + self.firstname.text! + " user=" + self.lastname.text! + " description=" + self.instrument.text!))
}
override func viewDidLoad() {
super.viewDidLoad()
firstname.autocorrectionType = .No
lastname.autocorrectionType = .No
instrument.autocorrectionType = .No
test.autocorrectionType = .No
//Looks for single or multiple taps.
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(PostController.dismissKeyboard))
view.addGestureRecognizer(tap)
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func postForm(postString: String) -> String {
let url:NSURL = NSURL(string: "http://mybudget-env.hnfarjj5iy.ap-southeast-2.elasticbeanstalk.com/api/transactions/")!
let session = NSURLSession.sharedSession()
let username = "mike"
let password = "password"
let loginString = NSString(format: "%@:%@", username, password)
let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)!
let base64LoginString = loginData.base64EncodedStringWithOptions([])
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
let paramString = postString
request.HTTPBody = paramString.dataUsingEncoding(NSUTF8StringEncoding)
let task = session.dataTaskWithRequest(request) {
(
let data, let response, let error) in
guard let _:NSData = data, let _:NSURLResponse = response where error == nil else {
print("error")
return
}
let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print(dataString)
}
task.resume()
let greeting = postString
return greeting
}
func dismissKeyboard() {
//Causes the view (or one of its embedded text fields) to resign the first responder status.
view.endEditing(true)
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
感謝您的意見。這聽起來像是一個好主意,可以很好地瞭解POST請求的一些可見性。我將添加&符號,我將如何添加內容類型?在此先感謝 – Jimmyn
內容類型是一個標題,說明什麼類型的http正文數據,在你的情況下,它的形式是URL編碼 – Wain