Я пытаюсь воссоздать страницу this на iOS. Запрос HTML POST Я требую, чтобы отправить параметры поиска выглядит следующим образом:iOS HTML POST Request
<FORM ACTION="pw_pub_sched.p_listthislist" METHOD="post">
Использование Rob's answer here Я был в состоянии создать создать запрос на следующий HTTP POST:
@IBAction func testHTTPPost(sender: AnyObject) {
let request = NSMutableURLRequest(URL: NSURL(string: "https://banner.sbcc.edu/PROD/pw_pub_sched.p_listthislist")!)
request.HTTPMethod = "POST"
let postString = "TERM=201730&TERM_DESC=Fall 2016&sel_subj=dummy&sel_day=dummy&sel_schd=dummy&sel_camp=dummy&sel_ism=dummy&sel_sess=dummy&sel_instr=dummy&sel_ptrm=%&level=CR"
request.HTTPBody = postString.dataUsingEncoding(NSISOLatin1StringEncoding)
request.HTTPShouldHandleCookies = true
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
(data, response, error) in
guard error == nil && data != nil else { // check for fundamental networking error
print("error=\(error)")
return
}
if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(response)")
}
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("responseString = \(responseString)")
}
task.resume()
}
Однако я получаю 404 ошибка каждый раз. Это выход:
statusCode should be 200, but is 404
response = Optional(<NSHTTPURLResponse: 0x7f8e398d2410> { URL: https://banner.sbcc.edu/PROD/pw_pub_sched.p_listthislist } { status code: 404, headers {
Connection = "Keep-Alive";
"Content-Length" = 215;
"Content-Type" = "text/html; charset=iso-8859-1";
Date = "Fri, 27 May 2016 19:23:23 GMT";
"Keep-Alive" = "timeout=5, max=100";
Server = "Oracle-Application-Server-11g";
} })
responseString = Optional(<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /PROD/pw_pub_sched.p_listthislist was not found.</p>
</body></html>
)
Когда я пытаюсь перейти непосредственно к https://banner.sbcc.edu/PROD/pw_pub_sched.p_listthislist в моем браузере я также пришел с ошибкой 404. Только с помощью кнопки отправки на странице поиска я успешно просматриваю страницу результатов. Однако я попытался сделать запрос на страницу поиска напрямую, а также получил ошибку 404, которая заставляет меня думать, что это мой код. Где-то еще я должен отправить этот запрос? Почему эта страница, похоже, не существует, если я не просматриваю страницу поиска?
Нет, это, вероятно, НЕ ваш код (напрямую). они, вероятно, проверяют референт или имеют cookie/anti-spam sentinel, поэтому он работает со своей страницы поиска, но не идет напрямую или из кода. ваш код должен точно воссоздать все, что отправляется со своей страницы поиска, что может означать симуляцию начального GET на странице, чтобы установить сеанс и получить/извлечь токены антиспама. –
Спасибо за ваш ответ. Он даже работает при отправке из моего собственного документа HTML, когда я сохраняю файл страницы поиска на своем компьютере и изменяю его. Поэтому, похоже, не имеет значения, откуда приходит запрос. Есть ли способ проверить и/или выполнить их требования? –
Спасибо, я посмотрю. На какой странице я нахожусь? результаты или страница поиска –