2016-05-27 9 views
0

Я пытаюсь воссоздать страницу 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, которая заставляет меня думать, что это мой код. Где-то еще я должен отправить этот запрос? Почему эта страница, похоже, не существует, если я не просматриваю страницу поиска?

+0

Нет, это, вероятно, НЕ ваш код (напрямую). они, вероятно, проверяют референт или имеют cookie/anti-spam sentinel, поэтому он работает со своей страницы поиска, но не идет напрямую или из кода. ваш код должен точно воссоздать все, что отправляется со своей страницы поиска, что может означать симуляцию начального GET на странице, чтобы установить сеанс и получить/извлечь токены антиспама. –

+0

Спасибо за ваш ответ. Он даже работает при отправке из моего собственного документа HTML, когда я сохраняю файл страницы поиска на своем компьютере и изменяю его. Поэтому, похоже, не имеет значения, откуда приходит запрос. Есть ли способ проверить и/или выполнить их требования? –

+0

Спасибо, я посмотрю. На какой странице я нахожусь? результаты или страница поиска –

ответ

0

Проблема была в том, что я не отправил все необходимые параметры с помощью запроса POST.

Благодаря @MarcB за его помощью