웹사이트에서 수행되는 Ajax호출을 그대로 따라하는 Java클라이언트를 만들고 싶습니다.

조회수 8890회

아래는 제가 수행하고 싶은 ajax코드입니다. 해당 페이지는 부산대학교 홈페이지이며 기본적인 html코드에서 원하는 데이터는 얻었지만, 과목편람과 같이 Ajax call을 통해 얻어오는 정보는 가져올 수가 없더라구요.

그래서 찾다보니 json으로 넘긴것은 파싱할때도 파라메터를 json으로 넣어야한다라 하길래 한번 코드를 구현해보았는데 안되더라구요.

json의 데이터를 잘못 넣었는지 아니면 아래 추가로 있는 url 때문인지 모르겠습니다.

$.ajax({
            url : "/middleware/curriculum/allocationOfPeople/searchPeriod",
            type : 'POST',
            dataType : 'json',
            data : JSON.stringify(paramMap),
            contentType : 'application/json',
            success : function(data) {
                var datas=data.dataset1;
                var isOK=datas[0].기간;
                var url;
                var type=$("#searchType1").is(":checked");
                var paramMap = {};
                var year=$("#year").val();
                var semester=$("#semester").val();
                var subject_is=$("#subject_is").val();

                if(isOK=="Y"){
                    if(type==true){
                        var refinementAndMajor=$("#refinementAndMajor").val();
                        url="/middleware/curriculum/college/CollegeAssignInfoSearch";
                        paramMap["pName"] = [ "YEAR", "TERM","DEPTCD","CULTCD","GUBUN"];
                        if(subject_is=='3'){
                            paramMap["pValue"] = [ year,semester,"",refinementAndMajor,subject_is];
                        }else{
                            paramMap["pValue"] = [ year,semester,refinementAndMajor,"",subject_is];
                        }
                    }else{
                        var r_type_input=$("#r_type_input").val();
                        url="/middleware/curriculum/college/curriculumCollegeSubjectAssignInfoSearch";
                        paramMap["pName"] = [ "YEAR", "TERM","GUBUN","교과목명"];
                        paramMap["pValue"] = [ year,semester,subject_is,r_type_input];
                    }
                }else{
                    if(type==true){
                        var refinementAndMajor=$("#refinementAndMajor").val();
                        url="/middleware/curriculum/college/CollegeSearch";
                        paramMap["pName"] = [ "YEAR", "TERM","DEPTCD","CULTCD","GUBUN"];
                        if(subject_is=='3'){
                            paramMap["pValue"] = [ year,semester,"",refinementAndMajor,subject_is];
                        }else{
                            paramMap["pValue"] = [ year,semester,refinementAndMajor,"",subject_is];
                        }
                    }else{
                        var r_type_input=$("#r_type_input").val();
                        url="/middleware/curriculum/college/curriculumCollegeSubjectSearch";
                        paramMap["pName"] = [ "YEAR", "TERM","GUBUN","교과목명"];
                        paramMap["pValue"] = [ year,semester,subject_is,r_type_input];
                    }
                }
                fn_search(url,paramMap,subject_is,isOK);

            },
            error : function(data, status, er) {
                alert("error: " + data + " status: " + status + " er:" + er);
            }
        });```





아래는 위 ajax를 재현하기 위해 Java로 구현하고 있는 부분입니다.

    private static String getHttpHTML_POST() {
        String url="http://e-onestop.pusan.ac.kr/menu/class/C03/C03001/";
       String sb="";  
          try {
           URL object=new URL(url);

           HttpURLConnection con = (HttpURLConnection) object.openConnection();

           con.setDoOutput(true);
           con.setDoInput(true);
           con.setRequestProperty("Content-Type", "application/json");
           con.setRequestProperty("Accept", "*/*");
           con.setRequestProperty("X-Requested-With", "XMLHttpRequest");
           con.setRequestMethod("POST");


           JSONObject data = new JSONObject();
           data.put("YEAR","2016");
           data.put("TERM", "10");
           data.put("DEPTCD","346712");
           data.put("CULTCD", "");
           data.put("GUBUN", "1");
           OutputStreamWriter wr= new OutputStreamWriter(con.getOutputStream());

           wr.write(data.toString());
           wr.flush();

           //display what returns the POST request



           int HttpResult =con.getResponseCode(); 

           if(HttpResult ==HttpURLConnection.HTTP_OK){

               BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"utf-8"));  

               String line = null;  

               while ((line = br.readLine()) != null) {  
                sb = sb+line + "\n";  
               }  

               br.close();  

               System.out.println(""+sb.toString());  

           }else{
               System.out.println(con.getResponseMessage());  
           }  
          }
          catch (Exception e) {
           e.printStackTrace();
          }
          finally {

          }

          return sb;

    }
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • ajax코드를 분석하는것도 좋지만 동작을 했을때 실제 어떤 코드가 나가는지 브라우저에서 보는게 더 좋을것 같네요.

    우선 크롬-도구더보기-개발자도구를 켜고 네트워크 탭을 열어 놓으세요. http://e-onestop.pusan.ac.kr/menu/class/C03/C03001/ 을 열고 세부구분을 기초영어로 선택하고 검색을 누르면 아래 주소로 POST가 나갑니다.

    http://e-onestop.pusan.ac.kr/middleware/curriculum/college/CollegeAssignInfoSearch

    그리고 Payload에 JSON은 다음과 같은 형태로 들어가 있네요.

    {pName: ["YEAR", "TERM", "DEPTCD", "CULTCD", "GUBUN"], pValue: ["2016", "10", "", "11750", "3"]}
    

    응답은 다음과 같이 옵니다.

    {"dataset1":[{"학점":1.0,"교수번호":"111694","학년":"","학과코드":"611000","교과목명":"기초영어","학과명":"교양교육원","교수명":"장경철","강의시간":"수 09:00(100) 210-107","대학명":"전대학","올사이버":"O","현재인원":"575","분반":"001","구분":"일반선택","교과목번호":"ZF11750","제한인원":"575/600","시수":2}]}
    

    브라우저에서 동작하는 JSON의 형식과 작성해 주신 자바코드는 서로 다른 형태로 보입니다. data.put("pName", new JSONArray("YEAR","TERM"...));이렇게 적어 주어야 하겠네요.

    참고로 크롬 브라우저에서 개발자 도구 활용하는 방법은 이 강의를 확인하세요.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)