gpt4 book ai didi

ios - 无法在我的 WKWebView POST 请求上设置 header

转载 作者:IT王子 更新时间:2023-10-29 08:02:44 30 4
gpt4 key购买 nike

我想对我的 WKWebView 执行 POST 请求,但是当我使用 Charles 监视请求时, header 未设置,因此请求失败。这里有什么问题?

NSString *post = [NSString stringWithFormat: @"email=%@&password=%@", email, password];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *contentLength = [NSString stringWithFormat:@"%d", postData.length];

NSURL *url = [NSURL URLWithString:@"http://materik.me/endpoint"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postData];
[request setValue:contentLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];

[webview loadRequest:request];

这就是 Charles 所说的请求:

POST /endpoint HTTP/1.1
Host: materik.me
Content-Type: application/x-www-form-urlencoded
Origin: null
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (iPhone; CPU OS 8_0 like Mac OS X)
Content-Length: 0
Accept-Language: en-us
Accept-Encoding: gzip, deflate

所以,如你所见,Content-Length0Accept不是application/json并且没有发送请求正文。

感谢您的帮助。

最佳答案

正如 OP 所述,我还在 Charles 中确认了 webView.load(request) 之后的正文是 0 字节。

对于这个 WKWebView bug 有一个解决方法,我们将发起一个 POST 请求,使用 URLSession 将服务器返回的数据转换为 String 并且我们将使用 loadHTMLString 而不是加载 url这将:

Set the webpage contents and base URL.

内容就是我们转换后的字符串:

var request = URLRequest(url: URL(string: "http://www.yourWebsite")!)
request.httpMethod = "POST"
let params = "do=something&andAgain=something"
request.httpBody = params.data(using: .utf8)

let task = URLSession.shared.dataTask(with: request) { (data : Data?, response : URLResponse?, error : Error?) in
if data != nil {
if let returnString = String(data: data!, encoding: .utf8) {
self.webView.loadHTMLString(returnString, baseURL: URL(string: "http://www.yourWebsite.com")!)
}
}
}
task.resume()

关于ios - 无法在我的 WKWebView POST 请求上设置 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26253133/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com