我在 iOS 应用程序中使用以下 Swift 3 代码来尝试更新后端 MySQL 数据库:
var request = URLRequest(url: URL(string: "https://str8red.com/updateAPNS")!)
request.httpMethod = "POST"
let postString = "devicetoken=gjhgjgjgkkgggkgkghgkgkhjg"
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else { // check for fundamental networking error
print("error=\(String(describing: error))")
return
}
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(String(describing: response))")
}
let responseString = String(data: data, encoding: .utf8)
print("responseString = \(String(describing: responseString))")
}
task.resume()
当我运行此代码时,iOS 会按预期运行并从 Web 服务器返回 500 错误。当我检查 Webserver 报告时,出现以下错误:
MultiValueDictKeyError at /updateAPNS/
"'devicetoken'
更令人困惑的是,反馈表明:
POST: No POST data
iOS 不应该像上面代码中的第 3 行所述那样发布 devicetoken 变量吗?如果不是,我如何在我的视图中访问 devicetoken 变量?
我的 Django 视图在下面,以防万一它可能有帮助:
def updateAPNS(request, extra_context={}):
currentUser = request.user
currentUserID = currentUser.id
if not currentUserID:
return HttpResponse("APNS is NOT Updated")
else:
APNSUpdate, created = APNSDevice.objects.update_or_create(user_id=currentUserID,
defaults={"user_id": currentUserID,
"registration_id": request.POST['devicetoken']})
return HttpResponse("APNS is Updated")
在终端上使用 curl 测试发布请求后,我得到:
<h1>Forbidden <span>(403)</span></h1>
<p>CSRF verification failed. Request aborted.</p>
<p>You are seeing this message because this HTTPS site requires a 'Referer header' to be sent by your Web browser, but none was sent. This header is required for security reasons, to ensure that your browser is not being hijacked by third parties.</p>
我一看到这个,我就@csrf_exempt
在我的视图之上添加了它,一切都完美无缺。
对于任何想了解更多关于 curl 的人,请前往:
https://superuser.com/questions/149329/what-is-the-curl-command-line-syntax-to-do-a-post-request
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句