저는 프로그래밍에 익숙하지 않습니다. 이제 PHP를 백엔드 서버로 사용하여 iOS 앱을 만드는 법을 배우고 있습니다.오류 도메인 HTTP 요청에서 GET 메서드를 사용할 때
내가 아는 한, http 메서드에서 GET 메서드를 사용하면 브라우저에서 쿼리를 작성하는 것과 같습니다.
하자, 난 브라우저에서 다음과 같이 쓸 수 있습니다 내가 서버에서 JSON 응답을 얻기 위해 쿼리 항목으로 'ID를 보낼하고 싶은 말은
HTTP : /website.com/post.php ID = 23
저는 PHP를 사용하여 백엔드를 구축하고 해당 ID를 잡으려고 서버 측 코드에서 $ _REQUEST를 사용합니다 ($ _REQUEST는 POST 메서드로 GET &을 수용 할 수 있음).
브라우저에서 해당 경로에 액세스 할 때 서버에서 JSON 데이터 응답을받을 수 있습니다. 오류 도메인 = NSCocoaErrorDomain 코드 = 3840 "값 없음."내가 GET 메소드를 사용하여 내 iOS 앱에서 해당 쿼리를 전송하려고 할 때
하지만, 내가 오류를
오류가 없다 사용자 정보 = {NSDebugDescription = 값 없음.}
하지만 POST 해당 HTTP 방식을 변경할 때, 그것은 완벽하게 작동한다. 다음은 iOS 앱에서 요청을 전송할 때 활성화되는 메소드입니다. 데이터베이스에 새로운 데이터를 만들지 않고 데이터를 가져 오려고합니다.
func loadPost() {
let id = userInfo!["id"] as! String
let url = URL(string: "http://localhost/Twitter/post.php")
var request = URLRequest(url: url!)
request.httpMethod = "GET" <--- if i change this to POST, it is worked
let body = "id=\(id)"
request.httpBody = body.data(using: .utf8)
let session = URLSession.shared
let task = session.dataTask(with: request, completionHandler: { (data, response, error) in
if error == nil {
DispatchQueue.main.async {
self.activityIndicator.startAnimating()
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
guard let parsedJSON = json else {
print ("error while parsing JSON")
return
}
print(parsedJSON)
} catch {
print ("Error : \(error)")
}
}
} else {
print ("Error : \(error!)")
}
})
task.resume()
}
여기에 무슨 문제가 있습니까? GET 메서드가 아닌 POST 메서드를 사용하는 경우에만 작동하는 이유는 무엇입니까?
관련없는 그들에게 기대하는
POST
같은 쿼리 문자열 매개 변수로 매개 변수를 기대하지만, 스위프트에'사용'[문자열을 NSDictionary'를 사용하지 않는 : 어떤을 ]'JSON 사전을 구문 분석 할 때 사용하고'.mutableContainers'를 사용하지 않습니다. Swift에서는 효과가 없습니다. –Safari에서 URL을 사용해도 작동합니까? 데이터를 다시 받으시겠습니까? – Larme