ios - 如何使用 Alamofire 发送字节?

标签 ios rest swift post alamofire

我正在创建一个应用程序来下载我的大学时间表。我首先用 Java 完成了 REST 调用,以演示一个运行良好的原型(prototype)。现在我想在 Swift 中使用 Alamofire(或任何其他有效的工具)来完成它。

下面是我试图复制的 Java 中的 REST 调用。

Client client = Client.create();

String authString = "UID=XXXXX&PASS=XXXXX";
byte[] authBytes = authString.getBytes();

WebResource webResouce = client.resource("https://access.adelaide.edu.au/sa/login.asp");

ClientResponse response = webResource.post(ClientResponse.class, authBytes);

if (response.getStatus != 302) {
throw new RuntimeException("Failed: HTTP code: " + response.getStatus());
}

但是我无法正确发送字节。服务器将实际接受任何字节数据(因此您可以查看它是否可以在没有 UID 或 PASS 的情况下工作)并以 302 响应,这表明它可以工作。否则它会发送 200,这意味着它没有。

我尝试过几次在参数中发送 UID 和 PASS,获取它们的字节,然后将它们放入参数等,但到目前为止似乎没有任何效果。

任何帮助都会很棒,谢谢!

最佳答案

您应该使用 Alamofire 的自定义编码技术(类似于此)。这是我学习 Swift 的第 3 个小时,请耐心等待。

struct ByteEncoding: ParameterEncoding {
  private let data: Data

  init(data: Data) {
    self.data = data
  }

  func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
    var urlRequest = try urlRequest.asURLRequest()
    urlRequest.httpBody = data
    return urlRequest
  }
}

Alamofire.request(url: "url", method: .post, parameters: nil, encoding: ByteEncoding(data: authBytesAsData)

文档 https://github.com/Alamofire/Alamofire#custom-encoding

关于ios - 如何使用 Alamofire 发送字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29208322/

相关文章:

iphone - 代码中使用的 iOS 谷歌地图方向 API

javascript - 在 AJAX 中执行 POST 查询时,控制台中收到 'data is not defined' 错误

java - 使用 REST API 创建新站点

swift - 如何使 ObservableObject 符合 Codable 协议(protocol)?

ios - 如何显示时间 08 :00:00 to 8 am using swift

ios - 存储单个 BOOL 全局数据值的最佳方法

swift - 在 Swift 中,如何对字符串数组进行排序,并使数字、符号等字符串始终位于字母字符串之后?

ios - 快速为一个 View Controller 启用纵向和横向,而仅为其他 View Controller 启用纵向?

像 iMessage 一样的 iOS 消息 View 控件

algorithm - 在哈希中包含时间戳,但如何比较哈希?