2011-09-27 70 views
2

我正在尝试使用java.net包类读取网站。该网站有内容,我在浏览器的html源代码工具中手动查看。当我得到响应代码并尝试使用java查看站点时,它会成功连接,但会将站点解释为没有内容的站点(204代码)。这是怎么回事,是否有可能解决这个问题来自动查看html。是否可以通过java.net访问204响应代码的站点的html?

感谢您的回复: 您是否需要该网址?

这里是代码:

URL hef=new URL(the website); 
    BufferedReader kj=null; 
    int kjkj=((HttpURLConnection)hef.openConnection()).getResponseCode(); 
    System.out.println(kjkj); 
    String j=((HttpURLConnection)hef.openConnection()).getResponseMessage(); 
    System.out.println(j); 
    URLConnection g=hef.openConnection(); 
    g.connect(); 

    try{ 
      kj=new BufferedReader(new InputStreamReader(g.getInputStream())); 


    while(kj.readLine()!=null) 
    { 
     String y=kj.readLine(); 

     System.out.println(y); 
     } 
    } 

    finally 
    { 
     if(kj!=null) 
     { 
      kj.close(); 
     } 
    } 


    } 
+0

你可以发布代码吗? – Joe

回答

1

建议:

  • 断言时比手动访问该网站(与Web浏览器客户端),你实际上得到一个200返回码
  • 制作确保从自动(基于Java)逻辑发出的HTTP请求与交互式Web浏览器客户端发送的HTTP请求相似/相同。尤其要确保用户代理是相同的(某些站点根据代理故意改变其响应)。
  • 您可以使用数据包嗅探器,可能像Fiddler2准确地看到正在发送和从服务器
  • 接收/我不知道的是,java.net包是机器人感知,但也可能是一个因素(你能否检查底层网站是否有robot.txt文件)。

编辑:
假设你使用java.net包中的HttpURLConnection类类,“机器人”的假设并不适用。
另一方面,您可能想要使用连接的setRequestProperty()方法为请求准备所需的HTTP标头(以便它们与来自Web浏览器客户端的这些标头匹配)
也许您可以发布您的相关部分码。

+0

这正是我正在寻找的信息。谢谢,我相信用户代理是问题,fiddler2是有用的。 –

相关问题