Swift应用发送PUT请求出现403错误的解决方法
我需向指定URL发送PUT请求,请求头与请求体如下(对应图片所示)。此前在Postman中因Cookies头携带csrftoken导致请求异常,删除该头后请求恢复正常。但在Swift应用中按相同逻辑配置(请求体与Postman完全一致,仅发送Content-Type: application/json头,URL已确认无误),却出现403错误。怀疑是请求中未清除Cookies头所致,恳请协助解决。
以下是我的请求代码实现:
var path: String { switch self { case .loginUser: return "/user/login/" case .getGalleryImages: return "/gallery/list/" case .getPrograms: return "/curriculum/academic-year" case .getTimeTable: return "/curriculum/timetable" case .addTimeTable(let id, _, _, _, _, _, _, _): return "/curriculum/timetable/\(id)/" } } var queryItems: [URLQueryItem] { //paginated response will include switch self { case .getPrograms(let date): return [ URLQueryItem(name: "date", value: date) ] case .getTimeTable(let grade, let dayOfTheWeek): return [ URLQueryItem(name: "grade", value: String(grade)), URLQueryItem(name: "day_of_week", value: dayOfTheWeek) ] default: return [] } } var headers: [String : String] { switch self { case .loginUser, .addTimeTable: return ["Content-Type": "application/json"] default: return [:] } } var method: Alamofire.HTTPMethod { switch self { case .loginUser: return .post case .getGalleryImages, .getPrograms, .getTimeTable: return .get case .addTimeTable: return .put } } var url: URL? { var components = URLComponents(string: self.baseURLString) components?.path += self.path if !queryItems.isEmpty { components?.queryItems = queryItems } return components?.url } var request: URLRequest? { guard let url = self.url else { return nil } var request = URLRequest(url: url) request.method = method request.httpBody = body request.allHTTPHeaderFields = headers return request } var body: Data? { switch self { case .loginUser(let username, let password): let body: [String: String] = [ "username": username, "password": password ] return try? JSONSerialization.data( withJSONObject: body, options: .fragmentsAllowed ) case .addTimeTable( _, let grade, let subject, let teacher, let day_of_week, let period_number, let start_time, let end_time ): let body: [String: Any] = [ "grade": grade, "subject": subject, "teacher": teacher, "day_of_week": day_of_week, "period_number": period_number, "start_time": start_time, "end_time": end_time ] return try? JSONSerialization.data( withJSONObject: body, options: .fragmentsAllowed ) default: return nil } }
内容的提问来源于stack exchange,提问作者AadityaS
相关产品推荐
相关产品推荐

