我正在开发一个在社交网络上与用户互动的程序。我想要一个工具,处理大部分或所有的网络通信
我的工作包括登录网站,阅读帖子,发送回复和个人消息。
我最初认为我可以用一些套接字代码来处理必要的交互。我最初的单运行案例运行成功(我能够登录、发布内容、响应查询等),但是尝试一起运行所有东西都不起作用(服务器无法识别我的请求,各种其他错误)。我做了一些非常糟糕的cookie跟踪,我将套接字从80切换到443用于SSL通信,我生成自己的数据包发送到社交网络服务器,由于这是我第一次尝试web交互,我完全超出了我的能力范围。
我想知道是否有我可以使用的java模拟浏览器。也就是说,我可以获得页面上文本框的句柄,输入我的登录信息并执行登录过程(然后模拟浏览器将处理所有cookie,处理单个数据包,等等)
我的目标是有一个可以在我的计算机上运行的程序,它可以与社交网络上的用户交互,而不需要我方面的任何重要输入(我不希望这个程序垄断Firefox,这会阻止我在系统上使用Firefox )
对于上下文,我发送了典型的html页面调用和自定义包调用(并解析结果)。
感谢您的帮助
发布于 2012-07-06 07:44:40
我建议您使用以下两种方法之一:
选项1:使用Apache Http Components Library。我发现这在将表单数据发送到web服务器时非常容易使用。它支持SSL和cookies,尽管我还没有用过它。我唯一的问题是我似乎不能让它通过代理服务器进行通信。请参阅my the question I posted about this.,但只要您不是通过代理,我就会给这个库一个热情洋溢的推荐,我在上面的链接中发布的代码显示了它的易用性。下面是一个将表单数据发送到web服务器的代码示例:
import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.client.methods.*; //HttpHead, HttpPut, HttpGet, etc...
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.entity.*;
import org.apache.http.impl.client.SystemDefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public static void sendForm(String user, String val) throws IOException {
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("user", user));
formparams.add(new BasicNameValuePair("message", val));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
String uri = "http://theServer.com";
HttpPost httppost = new HttpPost(uri);
HttpClient httpclient = new SystemDefaultHttpClient();
HttpResponse response = httpclient.execute(httppost);
response.getStatusLine().toString() + "\n" +
EntityUtils.toString(response.getEntity()));
System.out.println(EntityUtils.toString(response.getEntity()));
}选项2:有一个功能齐全的web浏览器,它与JavaFX一起提供,称为web view。您可以通过编程方式与其交互,这一点在Java Spotlight Podcast的最新一期中进行了讨论。
发布于 2012-07-06 08:18:14
你可以使用embed env.rhino.js in your Java app。
env.js是“作为脚本环境的浏览器的高度可移植的javascript实现(通常被称为‘无头’浏览器)”。
rhino实现使用rhino javascript引擎,它是用于JavaScript的Java运行时,并将随Oracle Java实现一起提供。
env.js有合理的能力,因为它使用参考html5解析器的交叉编译版本,并且可以处理充分利用jQuery库和html dom的JavaScript。
此外,我确实喜欢索恩关于JavaFX web组件的建议。但是,如果你不需要显示任何视觉效果,你可能只需要WebEngine而不需要WebView。
发布于 2012-07-06 08:28:58
行业标准是Selenium。它通常用于创建自动化的系统测试,但也可以在需要代码内浏览器的任何地方使用。
我要提醒你,让它工作可能是一个陡峭的学习曲线……需要相当神秘的glue code,但是一旦你启动并运行它就相当不错了。
https://stackoverflow.com/questions/11352888
复制相似问题