- 浏览: 444238 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
danStart:
想问问,能监测服务是否挂掉吗?
公司要求实时监控服务器,写个Web的监控系统 -
hepct:
你好,最近在搭一个游戏服务器,能加好友请教下吗?1538863 ...
java游戏服务端实现 -
Limewwy:
没打完就发表了?为啥要这样设置?【游戏中需要传递用户的积分,这 ...
java游戏服务端实现 -
Limewwy:
楼主您好。请教为啥要这样设计?
java游戏服务端实现 -
3849801:
楼主,能够提供更具体的文档或者指导吗?我想搭建一个服务端,非常 ...
java游戏服务端实现
今天是2008年7月7日星期一,下午一直在学校做个人开始页面。因为离不开google的翻译,所以想把google的翻译整合到我的开始页面中来,于是乎就遇到了一个问题,怎样使用java程序发送http请求然后截获远程服务器返回的数据进行适当处理之后再输出?另外,google的翻译页面是使用post的方法提交数据的,无法直接通过网址进行处理,于是乎,这又涉及到了一个怎样使用java去post数据的问题。
经过拜读百度知道的提问(花了我20分),找到了一个htmlparser的jar包组件,据说是可以很高效率的进行html的解析。于是乎,立马下载了一个过来。(文后附件中有)试了一下果然不错。同时,在这个过程中也学会了怎样利用java来和其它网站交互,这可是一个非常不错的功能,配合htmlparser,可以随心所欲的截取别人网站的信息了!
废话不多说了,下面是具体的使用步骤。
首先,向一个Web站点发送POST请求只需要简单的几步:
注意,这里不需要导入任何第三方包
- package com.test;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.net.URL;
- import java.net.URLConnection;
- public class TestPost {
- public static void testPost() throws IOException {
- /**
- * 首先要和URL下的URLConnection对话。 URLConnection可以很容易的从URL得到。比如: // Using
- * java.net.URL and //java.net.URLConnection
- */
- URL url = new URL("http://www.faircanton.com/message/check.asp");
- URLConnection connection = url.openConnection();
- /**
- * 然后把连接设为输出模式。URLConnection通常作为输入来使用,比如下载一个Web页。
- * 通过把URLConnection设为输出,你可以把数据向你个Web页传送。下面是如何做:
- */
- connection.setDoOutput(true);
- /**
- * 最后,为了得到OutputStream,简单起见,把它约束在Writer并且放入POST信息中,例如: ...
- */
- OutputStreamWriter out = new OutputStreamWriter(connection
- .getOutputStream(), "8859_1");
- out.write("username=kevin&password=*********"); //post的关键所在!
- // remember to clean up
- out.flush();
- out.close();
- /**
- * 这样就可以发送一个看起来象这样的POST:
- * POST /jobsearch/jobsearch.cgi HTTP 1.0 ACCEPT:
- * text/plain Content-type: application/x-www-form-urlencoded
- * Content-length: 99 username=bob password=someword
- */
- // 一旦发送成功,用以下方法就可以得到服务器的回应:
- String sCurrentLine;
- String sTotalString;
- sCurrentLine = "";
- sTotalString = "";
- InputStream l_urlStream;
- l_urlStream = connection.getInputStream();
- // 传说中的三层包装阿!
- BufferedReader l_reader = new BufferedReader(new InputStreamReader(
- l_urlStream));
- while ((sCurrentLine = l_reader.readLine()) != null) {
- sTotalString += sCurrentLine + "\r\n";
- }
- System.out.println(sTotalString);
- }
- public static void main(String[] args) throws IOException {
- testPost();
- }
- }
package com.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URL; import java.net.URLConnection; public class TestPost { public static void testPost() throws IOException { /** * 首先要和URL下的URLConnection对话。 URLConnection可以很容易的从URL得到。比如: // Using * java.net.URL and //java.net.URLConnection */ URL url = new URL("http://www.faircanton.com/message/check.asp"); URLConnection connection = url.openConnection(); /** * 然后把连接设为输出模式。URLConnection通常作为输入来使用,比如下载一个Web页。 * 通过把URLConnection设为输出,你可以把数据向你个Web页传送。下面是如何做: */ connection.setDoOutput(true); /** * 最后,为了得到OutputStream,简单起见,把它约束在Writer并且放入POST信息中,例如: ... */ OutputStreamWriter out = new OutputStreamWriter(connection .getOutputStream(), "8859_1"); out.write("username=kevin&password=*********"); //post的关键所在! // remember to clean up out.flush(); out.close(); /** * 这样就可以发送一个看起来象这样的POST: * POST /jobsearch/jobsearch.cgi HTTP 1.0 ACCEPT: * text/plain Content-type: application/x-www-form-urlencoded * Content-length: 99 username=bob password=someword */ // 一旦发送成功,用以下方法就可以得到服务器的回应: String sCurrentLine; String sTotalString; sCurrentLine = ""; sTotalString = ""; InputStream l_urlStream; l_urlStream = connection.getInputStream(); // 传说中的三层包装阿! BufferedReader l_reader = new BufferedReader(new InputStreamReader( l_urlStream)); while ((sCurrentLine = l_reader.readLine()) != null) { sTotalString += sCurrentLine + "\r\n"; } System.out.println(sTotalString); } public static void main(String[] args) throws IOException { testPost(); } }
执行的结果:(果真是返回了验证后的html阿!神奇!)
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>账户已经冻结</title>
- <style type="text/css">
- <!--
- .temp {
- font-family: Arial, Helvetica, sans-serif;
- font-size: 14px;
- font-weight: bold;
- color: #666666;
- margin: 10px;
- padding: 10px;
- border: 1px solid #999999;
- }
- .STYLE1 {color: #FF0000}
- -->
- </style>
- </head>
- <body>
- <p> </p>
- <p> </p>
- <p> </p>
- <table width="700" border="0" align="center" cellpadding="0" cellspacing="0" class="temp">
- <tr>
- <td width="135" height="192"><div align="center"><img src="images/err.jpg" width="54" height="58"></div></td>
- <td width="563"><p><span class="STYLE1">登录失败</span><br>
- <br>
- 您的帐户活跃指数低于系统限制,您的帐户已经被暂时冻结。<br>
- 请您联系网络主管或者人事主管重新激活您的帐户。</p>
- </td>
- </tr>
- </table>
- <p> </p>
- </body>
- </html>
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>账户已经冻结</title> <style type="text/css"> <!-- .temp { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; color: #666666; margin: 10px; padding: 10px; border: 1px solid #999999; } .STYLE1 {color: #FF0000} --> </style> </head> <body> <p> </p> <p> </p> <p> </p> <table width="700" border="0" align="center" cellpadding="0" cellspacing="0" class="temp"> <tr> <td width="135" height="192"><div align="center"><img src="images/err.jpg" width="54" height="58"></div></td> <td width="563"><p><span class="STYLE1">登录失败</span><br> <br> 您的帐户活跃指数低于系统限制,您的帐户已经被暂时冻结。<br> 请您联系网络主管或者人事主管重新激活您的帐户。</p> </td> </tr> </table> <p> </p> </body> </html>
一些Web站点用POST形式而不是GET,这是因为POST能够携带更多的数据,而且不用URL,这使得它看起来不那么庞大。使用上面列出的大致的代码,Java代码可以和这些站点轻松的实现对话。
得到html以后,分析内容就显得相对轻松了。现在就可以使用htmlparser了,下面是一个简单的示例程序,过多的解释我就不说了,相信代码能够说明一切的!
- package com.test;
- import org.htmlparser.Node;
- import org.htmlparser.NodeFilter;
- import org.htmlparser.Parser;
- import org.htmlparser.filters.TagNameFilter;
- import org.htmlparser.tags.TableTag;
- import org.htmlparser.util.NodeList;
- /**
- * 标题:利用htmlparser提取网页纯文本的例子
- */
- public class TestHTMLParser {
- public static void testHtml() {
- try {
- String sCurrentLine;
- String sTotalString;
- sCurrentLine = "";
- sTotalString = "";
- java.io.InputStream l_urlStream;
- java.net.URL l_url = new java.net.URL("http://www.ideagrace.com/html/doc/2006/07/04/00929.html");
- java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url.openConnection();
- l_connection.connect();
- l_urlStream = l_connection.getInputStream();
- java.io.BufferedReader l_reader = new java.io.BufferedReader(new java.io.InputStreamReader(l_urlStream));
- while ((sCurrentLine = l_reader.readLine()) != null) {
- sTotalString += sCurrentLine+"\r\n";
- // System.out.println(sTotalString);
- }
- String testText = extractText(sTotalString);
- System.out.println( testText );
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public static String extractText(String inputHtml) throws Exception {
- StringBuffer text = new StringBuffer();
- Parser parser = Parser.createParser(new String(inputHtml.getBytes(),"GBK"), "GBK");
- // 遍历所有的节点
- NodeList nodes = parser.extractAllNodesThatMatch(new NodeFilter() {
- public boolean accept(Node node) {
- return true;
- }
- });
- System.out.println(nodes.size()); //打印节点的数量
- for (int i=0;i<nodes.size();i++){
- Node nodet = nodes.elementAt(i);
- //System.out.println(nodet.getText());
- text.append(new String(nodet.toPlainTextString().getBytes("GBK"))+"\r\n");
- }
- return text.toString();
- }
- public static void test5(String resource) throws Exception {
- Parser myParser = new Parser(resource);
- myParser.setEncoding("GBK");
- String filterStr = "table";
- NodeFilter filter = new TagNameFilter(filterStr);
- NodeList nodeList = myParser.extractAllNodesThatMatch(filter);
- TableTag tabletag = (TableTag) nodeList.elementAt(11);
- }
- public static void main(String[] args) throws Exception {
- // test5("http://www.ggdig.com");
- testHtml();
- }
- }
发表评论
-
ant使用小结
2014-04-01 13:12 3298Java代码 1. <prope ... -
模拟登录
2011-10-21 16:25 1875public class QQ { public stati ... -
在线查询使用常用API
2011-09-13 13:30 1386转载 收集了一些常用的API参考文档,放在这里以备及时 ... -
在linux中执行平台相关runtime.exec()
2011-03-23 15:46 2165/* * @(#) Exec.java Feb 28, 201 ... -
Finalize 和 GC的区别
2011-02-16 10:38 1244finalize()是由JVM自动调用的,你可以用System ... -
转:ThreadLocal示例
2010-09-09 09:00 1368本文借花献佛,引用Ti ... -
利用Tomcat7.0新特性,用BS实现CS的聊天服务器
2010-07-03 15:29 3505Tomcat7.0.0已经出来了,关注它已经支持se ... -
java加密解密
2010-04-16 11:29 1767转载:http://blog.csdn.net/xwchen/ ... -
优化MyEclipse
2010-01-04 14:23 1293“工欲善其事必先利其 ... -
html放入一个String中,将每行<td class = "b"></td>中的值读出
2009-04-09 17:33 2715我现在有一个网页。 <html> <body ... -
编写高效的线程安全类
2009-03-24 11:22 950文档选项 ... -
Struts中Token的使用方法
2008-11-25 16:11 4677Token的使用方法使用Token可以防止当用 ... -
一个基于Java和ajax得Web层聊天室
2008-10-11 17:22 4298一个基于Java和Ajax的聊 ... -
J2EE开发之常用开源项目介绍
2008-08-06 19:49 1086J2EE开发之常用开源项目介绍 主要就我所了解的J2EE开 ... -
获得来访IP
2008-07-30 15:54 1527public static String ge ... -
编写对gc友好,又不泄露的代码
2008-07-10 09:59 1146作者:江南白衣,最新版链接:http://blog.csdn. ... -
java.util.Collections.sort(List list)与Comparable,
2008-07-09 17:31 4920java.util.Collections.sort(List ... -
java不用jni,也可以获得当前系统性能信息
2008-07-04 13:23 11572最近做个项目,就是要取得cpu占有率等等的系统信息,一开始以为 ... -
在struts中使用checkbox实现批量删除
2008-04-30 11:32 4661<html:form StyleId = "d ... -
HttpURLConnection中获得重定向的地址 (转)
2008-04-22 09:35 10951HttpURLConnection使用中的一个问题,就是当连接 ...
相关推荐
Java发送Http请求,解析html返回
总结来说,Java发送HTTP请求涉及使用`java.net.HttpURLConnection`类,通过构造URL、设置请求属性、发送请求并解析响应内容来完成。封装这些操作到一个类中可以使代码更易于管理和复用。`HttpResponse`类则用于存储...
总的来说,Java发送HTTP请求和处理响应涉及网络编程、HTTP协议理解、异常处理、输入/输出流操作,以及可能的HTML解析和网页爬虫技术。这些知识对于任何想要构建Web客户端应用或进行数据抓取的开发者来说都是必不可少...
具体到这个"java实现http请求以及解析json与java对象转换"项目,你可以期待以下几个关键知识点: 1. **HTTP请求**: - GET请求:获取服务器上的资源。 - POST请求:向服务器提交数据,常用于表单提交或API接口...
总结,Android向Java后台发送请求并返回Json数据涉及的关键步骤包括选择网络请求库、设置请求参数、发送请求、处理响应以及解析Json数据。通过以上步骤,开发者可以实现Android客户端与后台服务的高效通信。在实际...
在处理返回的JSON数据时,Java提供了`org.json`库,可以方便地解析和构建JSON对象。例如: ```java import org.json.JSONObject; // 假设response是返回的JSON字符串 JSONObject jsonObject = new JSONObject...
接下来,调用`execute()`方法来执行请求,最后解析返回的响应。 ##### 示例代码: ```java public static String sendGetRequest(String requestUrl) { long responseLength = 0; String responseContent = null...
### JAVA发送HttpClient请求及接收请求结果过程 #### 一、概述 在Java开发过程中,经常需要与外部系统进行HTTP通信,比如发送POST或GET请求来获取数据或提交数据。Apache HttpClient是一个强大的HTTP客户端库,提供...
### Java 发送 HTTPS 请求时遇到证书问题解析 在进行网络通信的过程中,HTTPS 协议由于其安全性被广泛应用。本文将围绕“Java 发送 HTTPS 请求证书问题”这一主题展开讨论,通过对给定文件中的代码示例及操作步骤...
本主题将深入探讨如何使用Java解析HTTP请求处理结果,包括发送GET和POST请求、处理响应、解析网页内容以及应对常见问题。 首先,Java中的HttpURLConnection是标准库中用于执行HTTP请求的核心类。我们可以使用它来...
对于 Java 开发者来说,能够熟练掌握如何使用 Java 来构建 HTTP 请求并发送 JSON 数据是一项重要的技能。下面将详细介绍如何使用 Java 发送一个包含 JSON 数据的 HTTP POST 请求。 #### 代码解析 该示例代码展示了...
本篇文章将深入探讨如何在Java中利用HTTP协议发送XML报文,并通过实例和参数解析具体实现步骤。 首先,我们需要引入Java的HttpURLConnection类,这是Java标准库提供的HTTP客户端接口。发送XML报文通常涉及到POST或...
下面将详细解析如何利用`HttpURLConnection`来构建并发送一个包含JSON数据的POST请求: ```java import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io....
发送请求并读取响应状态码: ```java connection.connect(); int responseCode = connection.getResponseCode(); ``` 6. **处理响应** 读取服务器返回的数据,可能是JSON、XML或其他格式: ```java try...
本教程将深入讲解如何在Java环境中,利用Eclipse或MyEclipse IDE调用Web服务并解析返回的XML数据。 首先,理解Web服务的基本概念是关键。Web服务是一种通过HTTP协议传输数据的应用程序接口(API)。SOAP是基于XML的...
在这个场景下,我们将探讨如何使用JDOM来解析XML,并通过Java实现POST请求,从而与PHP服务器进行交互,获取或发送远程资源。 首先,理解XML的基本结构至关重要。XML文档由元素、属性、文本内容等组成,这些元素通过...
在给定的代码片段中,主要展示了如何使用Java中的Apache HttpClient库发送一个包含XML数据的POST请求,并接收响应。下面是对关键部分的详细分析: 1. **导入必要的库**:代码首先导入了处理网络请求、输入输出流...
在Java代码中,当通过HTTP请求传输包含中文的JSON数据时,前端通常会使用JavaScript的`JSON.stringify`函数将JSON对象转换为字符串,并通过GET或POST请求传递给后端。在JavaScript中,字符串默认使用UTF-8编码,因此...
本文将深入解析如何利用Java语言实现HTTP请求,并发送XML格式的数据,同时也会涵盖相关的概念、代码解读以及可能遇到的问题。 ### 一、HTTP与XML基础知识 #### HTTP(超文本传输协议) HTTP是互联网上应用最为广泛...
Java发送HTTP请求是进行网络通信的基本操作之一,广泛应用于数据获取、API调用等场景。在Java中,Apache HttpClient库是一个强大的工具,它允许开发者高效、灵活地处理HTTP请求。这个"java-http请求jar包"实际上就是...