2013-10-24 2 views
-3

웹에서 HTML 소스 코드를 가져 오려고합니다. 나는이웹에서 소스 코드를 얻는 방법은 무엇입니까?

u = new URL(url); 
URLConnection con = u.openConnection(); 
con.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2"); 
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 
StringBuilder a = new StringBuilder(); 
while ((line=in.readLine())!=null){ 
    a.append(line); 
} 
in.close(); 
contWeb = a.toString(); 

을 수행하여 시도했다 그러나 나는이 코드를 실행할 때이 내가

<head> 
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"> 
<meta http-equiv="cache-control" content="max-age=0" /> 
<meta http-equiv="cache-control" content="no-cache" /> 
<meta http-equiv="expires" content="0" /> 
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" /> 
<meta http-equiv="pragma" content="no-cache" /> 
<meta http-equiv="refresh" content="10; url=/distil_r_blocked.html?Ref=/windfarms/durrazzo-albania-al01.html" /> 
<script type="text/javascript" src="/ga.233033467223.js?PID=14CDB9B4-DE01-3FAA-AFF5-65BC2F771745" defer></script> 
<style type="text/css">#d__fFH{position:absolute;top:-5000px;left:-5000px}#d__fF{font-family:serif;font-size:200px;visibility:hidden}#collective57bfda9e,#friendshipeadab1a4,#degrees85b85925,#friendshipeadab1a4{display:none!important}</style></head> 
<body> 
<div id="distil_ident_block">&nbsp;</div> 
<div style="display: none;"> 
<a href="BangJensen32676optimal.html" id="friendshipeadab1a4" rel="file">reserved</a> 
</div> 
<div id="d__fFH"><OBJECT id="d_dlg" CLASSID="clsid:3050f819-98b5-11cf-bb82-00aa00bdce0b" width="0px" height="0px"></OBJECT> 
<span id="d__fF"></span> 
</div> 
</body> 
</html> 

을 얻을하지만 그 HTML 코드 나는 Ctrl 키 + U를 통해 (모질라 파이어 폭스와 HTML 코드를 볼 때) 내가보기에 상당히 다른 코드입니다.

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head><link id="ctl00_Link1" href="js/jquery/skin.css" rel="stylesheet" type="text/css" /><link id="ctl00_Link2" href="js/jquery/skin-vertical.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript" src="http://forensics1000.com/js/15075.js" async="async"></script> 
<script type="text/javascript" src="js/jquery/jquery.js" ></script> 
<script type="text/javascript" src="js/jquery/jquery.jcarousel.min.js" ></script> 
<div id="blq-local-nav"> 
<ul id="nav2"> 
<li id="ctl00_liWindfarms" class="first-child selected"><a href="./">Offshore Wind Farms</a></li> 
<li id="ctl00_liVessels"><a href="vessels.aspx" id="ctl00_A3">Vessels</a></li> 
<li id="ctl00_liTurbines"><a href="turbines.aspx" id="ctl00_A4">Turbines</a></li> 
<li id="ctl00_liFoundations"><a href="support-structures-for-offshore-wind-turbines-aid268.html" id="ctl00_Afoundations">Foundations</a></li> 
<li id="ctl00_liNews"><a href="windfarmsNews.aspx" id="ctl00_A5">News</a></li> 
<li id="ctl00_liMarketAnalysis"><a href="marketReports.aspx" id="ctl00_A6">Reports <span class="new">(new)</span></a></li> 
     <li id="ctl00_liDownloads"><a href="subscribers/downloads.aspx" id="ctl00_A7"><span class='subs'>Downloads</span></a></li> 

     <li id="ctl00_liEquipment"><a href="equipmentFinder.aspx">Equipment</a></li> 
     <li id="ctl00_liPorts"><a href="ports.aspx">Ports</a></li> 
     <li id="ctl00_liContactUs"><a href="contact.aspx">Contact</a></li> 
     <li id="ctl00_liAdvertise"><a href="request.aspx?id=advertise">Advertise</a></li> 

     <li style="float:right;" > 

      <a id="ctl00_LoginStatus1" href="javascript:__doPostBack('ctl00$LoginStatus1$ctl02','')">Login</a> 
     </li> 

     <li id="ctl00_liSubscribe" onclick="pageTracker._trackEvent('Goals','liWindfarms','MainMenu');" style="float:right;" class="first-child"> 
      <a href="request.aspx?id=owfdb" id="ctl00_A2">Subscribe</a> 
     </li> 
    </ul> 
    <ul id="ctl00_subnav"> 

    <li class=" first-child"><a href="windfarms.aspx">Project Database</a></li><li><a href="subscribers/owfdb/pipeline.aspx"><span class='subs'>Timeline Chart</span></a></li><li><a href="converters.aspx">Converters</a></li><li><a href="substations.aspx">Substations</a></li><li><a href="../offshorewind">Global Map</a></li><li><a href="widget.aspx">Maps For Your Website</a></li><li><a href="windspeeds.aspx">Wind Speeds</a></li><li><a href="powerdata.aspx">Power Data</a></li></ul> 
</div>           

HTML 코드는 여전히 있지만 여기에 붙여 넣기에는 너무 큽니다. 누구나 웹의 실제 콘텐츠를 어떻게 얻을 수 있는지 알고 있습니까? 왜 이런 일이 일어 났습니까? 나는 길을 잃었다.

+1

무엇을 기대합니까? –

+0

결함이 OBJECT입니까, 아니면 예상됩니까? – Dave

+0

반환되는 소스는 HTML 소스입니다. 실제 소스 코드를 찾고 있다면 액세스 할 수 없습니다. – ediblecode

답변

0

URLConnection 입력 스트림 커서가 몸체의 시작에있다. 나는이 사람과 헤데를 얻는 것이 가능하지 않지만, Socket, 뭔가를 줄 필요가있다. 소켓이

Socket s=new Socket("176.12.59.8",80); 
s.getOutputStream().write("GET /index.html?param=value HTTP/1.1\r\n".getBytes()); 
s.getOutputStream().write("User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2\r\n".getBytes()); 
//send other header requests, cookie, etc... 
s.getOutputStream().write("\r\n".getBytes()); 
s.getOutputStream().flush(); 
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); 
StringBuilder a = new StringBuilder(); 
while ((line=in.readLine())!=null){ 
    a.append(line); 
} 

문제 (하드 작업)과 같은 전송하고 데이터를 수신 대해 (소켓 당신은 단지 주소와 특정 포트에 연결하고 나머지 작업은 당신에게 속해 있다는 것이다).

이것은 낮은 수준의 접근 방식입니다.

편집은 다음 http://google.com/을 여는 고려, 제일 먼저입니다 만 순서대로 다음 입력 스트림이 데이터를 전송하여, 열려고하는 대상 경로와 포트를 지정해야 Socket와 해당 클라이언트 모두와 서버가 서로 이해한다면 여기 프로토콜은 HTTP/1.1입니다.

google ip가 74.125.228.41
이제 다음 코드를 사용해보세요.

import java.io.BufferedReader; 

수입 java.io.InputStreamReader; import java.net.Socket;

공용 클래스 양말 {

public static void main(String[] args)throws Exception { 
    String line=null; 
    Socket s=new Socket("74.125.228.41",80); 
    s.getOutputStream().write("GET/HTTP/1.1\r\n".getBytes());//requesting the root 
    s.getOutputStream().write("User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2\r\n".getBytes()); 
    //send other header requests, cookie, etc... 
    s.getOutputStream().write("\r\n".getBytes()); 
    s.getOutputStream().flush(); 
    BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); 
    StringBuilder a = new StringBuilder(); 
    while ((line=in.readLine())!=null){ 
     System.out.println(line); 
    } 

    } 

} 

당신은

GET/HTTP/1.1 
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 

을 보내고 밖으로 넣어

HTTP/1.0 200 OK 
Date: Fri, 25 Oct 2013 08:14:44 GMT 
Expires: -1 
Cache-Control: private, max-age=0 
Content-Type: text/html; charset=UTF-8 
Set-Cookie: NID=67=cnvAQD2mzWXzNmbkv40u0Fjqh-hfhbbBsqbgHmNbzvdxkUWEcNGbzeva56UYuuNfSzVgKeM0AwH8_yfesWA4mpdOLKTVYyPzJrlhrn7be1HWVMMxU-QSUQGfbR6N_OKQ; expires=Sat, 26-Apr-2014 08:14:44 GMT; path=/; domain=.; HttpOnly 
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info." 
Server: gws 
X-XSS-Protection: 1; mode=block 
X-Frame-Options: SAMEORIGIN 
Alternate-Protocol: 80:quic 
X-Cache: MISS from pouyanazm_appliance 
X-Loop-Control: 37.191.91.249 57B724E7913CDA261C464198106FF67D 
Connection: close 

<html>.....html content is here....</html> 

URLConnection 위의 모든 것 (HTTP로 전송 데이터)에 대한 작업을 수행 당신,하지만 당신에게 헤더 데이터를 반환하지 않습니다, 그냥 시체. 헤더 데이터를 가져 오거나 3을 사용하려면 Socket 접근 방식 (http를 구현해야 함)을 사용하거나 URLCOnnection을 재정의하는 3 가지 선택 사항이 있습니다. 심지어 내가 모르는 파티 라이브러리를 검색 할 수 있습니다.

+0

조언 해 주셔서 감사합니다. 그러나 청원에 필요한 모든 헤더가 손실되었습니다. 소켓으로 웹 사이트의 HTML 코드를 얻는 방법을 조금 더 설명해 주시겠습니까? –

+0

당신은 HTTP/1.1 프로토콜을 연구해야합니다. 'Socket'을 통해 구현하면 HTTP/1.1의 여러 헤더에 각 헤더가 특정 요구 사항에 사용되므로 무엇을하려고하는지 알아야합니다! 먼저 HTTP/1.1로 시작하십시오. –

+0

OK, 할 일 목록에 적어두기 만하면됩니다. 나는 그 웹 사이트에서 원하는 정보를 얻기 위해 웹 사이트의 HTML 코드를 얻으려고 노력하고있다. –

0

시스템 해킹에 대해 언급하지 않는 한 소스 코드를 볼 수 없습니다. ;-) 볼 수있는 코드는 HTML 코드입니다.이 코드는 소스 코드와 1 : 1이 될 수 있지만 PHP 스크립트, J2EE 클래스 등을 볼 수는 없습니다. 두려워요.

+0

오해 때문에 미안하지만 PHP 나 자바 스크립트가 아닌 HTML 코드에 대해 얘기하고있었습니다 –

+0

그래서 소스 코드가 있습니다. 너는 무엇을 볼 것으로 예상 했는가? 코드가 필요한 것을 처리합니다. – FazoM

+0

나는 결과적으로 내 코드에 웹 사이트의 실제 코드가 아닌 HTML 코드를 가지고있다. –

0

url의 inputstream에서 콘텐츠를 얻을 수 있습니다 (프로그램에서했던 것처럼). 코드를 사용하여 콘텐츠를 가져 오려고했습니다. 다른 URL의 콘텐츠를 읽으십시오. 콘텐츠를 얻을 수 있다면 콘텐츠를 제공하지 않는 URL을 분석해야합니다. 디버그 시나리오는 다음과 같아야합니다.

1. 콘텐츠가 ajax를 사용하여로드되었는지 확인하십시오. 2. 그들은 익명의 사용자를 차단하고 있습니까? 3. 내용을 압축 할 수 있습니다.

+1

다른 웹 사이트를 사용해 보았습니다. 귀하가 말했듯이 완벽하게 작동합니다. 내 생각 엔 웹 사이트가 자동으로 소스 코드를 얻을 수 없다는 것입니다 ... –

3

콘텐츠 보호 메커니즘이 사이트에 있습니다. 페이지를 얻으려면 브라우저 동작 (쿠키, refferer 등 포함)을 완전히 복제해야합니다.

관련 문제