2016-05-27 6 views
0

iOSでthisページを再作成しようとしています。私は404を受け取るしかしiOS HTML 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() 

} 

<FORM ACTION="pw_pub_sched.p_listthislist" METHOD="post"> 

は私が設定し、次のHTTP POSTリクエストを作成することができたRob's answer hereを使用して次のように私は、検索パラメータを送信するために必要なHTMLのPOSTリクエストがあります毎回エラーが発生します。これが出力されます:私は私のブラウザでhttps://banner.sbcc.edu/PROD/pw_pub_sched.p_listthislistに直接アクセスしようとすると

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> 
) 

私はまた、404エラーを思い付きます。検索ページで[送信]ボタンを使用するだけで、結果ページが正常に表示されます。しかし、私は検索ページへのリクエストを直接試みたし、404エラーを受け取り、それが私のコードであると信じさせました。このリクエストを送信する必要がある別の場所がありますか?なぜ私は検索ページを通過しない限り、このページは一見存在しないのでしょうか?

+0

いいえ、おそらくあなたのコードではありません(直接)。彼らはおそらくリファラーチェック、またはクッキー/スパム対策のセンチネルを持っているので、検索ページからは動作しますが、直接またはコードからは実行されません。あなたのコードは検索ページから送られたすべてのものを正確に再現しなければなりません。つまり、ページを初期化してセッションを確立し、スパムトークンを取得/抽出することを意味します。 –

+0

あなたの返事をありがとう。検索ページファイルを自分のコンピュータに保存して変更すると、自分のHTMLドキュメントから送信されたときにも機能します。したがって、要求がどこから来るかは重要ではないようです。彼らの要件をチェックしたり、要件を遵守する方法はありますか? –

+0

ありがとう、私はそれを調べます。私はどのページを入手しますか?検索結果ページまたは検索ページ –

答えて

0

問題は、POSTリクエストですべての必須パラメータを送信しなかったことです。

@MarcBの助けを借りて