因此,当我发送没有任何cookie的请求时,我收到错误。 当尝试手动获取请求时(在浏览器中)我首先需要转到主页,该主页加载4个cookie,然后请求可以继续进行而不会出错。一些实验表明我只需要一个饼干。
这对我来说是全新的,欢迎任何有关如何实施这些内容的指南/指南。我知道这个问题很模糊,但我迷失在哪里开始寻找,并希望得到任何帮助
let url = URL(string: "homepage")
var request = URLRequest(url: url!)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil, let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
print("response1")
print("error = \(error)")
print("response = \(response)")
return
}
if let json = try? JSONSerialization.jsonObject(with: data) {
print("responseObject = \(json)")
} else {
print("response2")
print("responseString = \(String(data: data, encoding: .utf8))")
}
let url2 = URL(string: "requestpage")
var request = URLRequest(url: url2!)
request.setValue("application/json", forHTTPHeaderField: "Accept")
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil, let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
print("response2")
print("error = \(error)")
print("response = \(response)")
return
}
if let json = try? JSONSerialization.jsonObject(with: data) {
print("responseObject = \(json)")
} else {
print("response2")
print("responseString = \(String(data: data, encoding: .utf8))")
}
}
task.resume()
}
task.resume()
答案 0 :(得分:0)
在您的代码中,您应该:
URLSessionTask
; URLSession
; 除非您做了明确干预此过程的事情,否则URLSession
会无缝接收Cookie并将其包含在后续请求中。
如果您正在抓取网站(如果是,请检查ToS以确保其被允许),建议您按照与网络浏览器相同的顺序请求网页。您可能觉得可以绕过该目标网页并自行设置Cookie,但通常会动态生成Cookie值,如果您尝试绕过该目标网页,则可能会遇到问题。
你问了一个例子,并没有多少表现出来。只需从完成第一个请求开始第二个请求。在Swift代码中没有对cookie的单一引用。 URLSession
负责一切:
let url = baseURL.appendingPathComponent("setcookie.php")
var request = URLRequest(url: url)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard error == nil, let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
print("error = \(error)")
print("response = \(response)")
return
}
let url = baseURL.appendingPathComponent("results.php")
var request = URLRequest(url: url)
request.setValue("application/json", forHTTPHeaderField: "Accept")
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil, let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
print("error = \(error)")
print("response = \(response)")
return
}
if let json = try? JSONSerialization.jsonObject(with: data) {
print("responseObject = \(json)")
} else {
print("responseString = \(String(data: data, encoding: .utf8))")
}
}
task.resume()
}
task.resume()
我的第一页setcookie
,只是设置了一个Cookie:
<?php
setcookie("foo", "bar", time()+3600);
$result = array("success" => true);
echo json_encode($result);
?>
我的第二页检索了cookie:
<?php
$result = array("success" => true);
if (isset($_COOKIE))
$result["_COOKIE"] = $_COOKIE;
header("Content-Type: application/json");
echo json_encode($result);
?>
以上的Swift代码输出:
responseObject = {
"_COOKIE" = {
foo = bar;
};
success = 1;
}