swift - HTTP POST html 数据有 0 个字节
问题描述
我正在创建一个看起来像这样的 HTML 字符串。
<form method='POST' action='https://secure.paygate.co.za/payweb3/process.trans'>
<input type='hidden' name='PAY_REQUEST_ID' value='653B3F12-3A86-EFE8-C96D-F1DD73B1E95F'></input><input type='hidden' name='CHECKSUM' value='F765B8AEA5F0D1067E1513832035BE76'></input></form>
我已经使用https://www.codepunker.com/tools/http-requests测试了 URL 和参数,我得到了成功的 HTML 响应,但是由于某种原因,我在使用下面的代码 http post 时得到了一个错误的 HTML 响应.
let url = URL(string: self.dpoURL)!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = postFormHtml.data(using: .utf8)
let session = URLSession.shared
let task = session.dataTask(with: request) { (data, response, error) in
if error != nil {
// Handle HTTP request error
} else if let data = data {
DispatchQueue.main.async{ [self] in
// Handle HTTP request response
self.resultFormHtml = String(data: data, encoding: .utf8)!
}
} else {
// Handle unexpected error
}
}
task.resume()
我有一种感觉,问题是当我将 HTML 字符串转换为 UTF8 时,postFormHtml.data(using: .utf8) 因为如果我打印我得到 0 字节。我还进行了以下测试并得到一个空白文本框。
let testHTML = postFormHtml.data(using: .utf8)
viewHTML.text = String(decoding: testHTML, as: UTF8.self)
将我的 HTML 字符串转换为数据时我做错了什么?
解决方案
最终,Postman 给出了答案。我在正文中添加了参数,而不是参数,然后使用右上角的按钮 CODE 为我生成了代码。
var semaphore = DispatchSemaphore (value: 0)
var request = URLRequest(url: URL(string: self.dpoURL)!,timeoutInterval: Double.infinity)
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.addValue("no-cache", forHTTPHeaderField: "Cache-Control")
request.addValue("paygate_payweb3=b09rqdgclqfi4gf7h261j79uke", forHTTPHeaderField: "Cookie")
request.httpMethod = "POST"
request.httpBody = postFormHtml
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
semaphore.signal()
return
}
self.resultFormHtml = String(data: data, encoding: .utf8)!
semaphore.signal()
}
task.resume()
semaphore.wait()
推荐阅读
- visual-studio - 基于 Visual Studio 2015 构建的项目在 Windows 10 中失败
- r - 无法在 R 中绘制平滑样条曲线
- anaconda - pandoc版本的问题
- mysql - 如何将哑文件导入 mySQL Server 上的 Azure DB,转储位于 blob 中。如何动态访问 blob 文件
- c++ - c++中静态数据成员的实现
- angular - 将 Angular 6 升级到 7 后 mat-sort-module 不起作用
- javascript - 隐藏和显示svg的最简单方法?
- python - 无头硒突然停止工作
- asp.net-mvc - 使用 Simple Injector 注册单个类
- angular - 角度错误:没有 NgControl 的提供者