yel*_*ver 15 java google-app-engine jsoup
我尝试使用JSoup登录facebook,当使用控制台应用程序或Tomcat服务器webapp进行测试时,它运行良好:
String userAgent = BrowserVersion.FIREFOX_38.getUserAgent();
Connection conn1 = Jsoup.connect("https://m.facebook.com");
Document document = conn1.userAgent(userAgent).execute().parse();
Element form = document.select("form").get(0);
Elements inputs = form.select("input");
Connection conn2 = Jsoup.connect(form.absUrl("action")).userAgent(userAgent);
for (Element input : inputs) {
conn2.data(input.attr("name"), input.val());
}
conn2.data("email", "mail@gmail.com").data("pass", "mypass");
Connection.Response response1 = conn2.method(Connection.Method.POST).execute();
System.out.println(response1.url());
Document doc1 = response1.parse();
Elements h3 = doc1.select("h3");
for (Element element : h3) {
System.out.println(element.text());
}
Run Code Online (Sandbox Code Playgroud)
response1.url()是https://m.facebook.com/home.php?_rdr
但是,当我尝试使用Google App Engine应用程序时,它无法登录,但会显示包含"您必须先登录"的消息的页面(我猜这个请求尝试访问其他网址)
我更改密码使其不正确,它显示错误的密码页面.所以我认为使用正确的密码,请求会转到正确的页面.但为什么使用正确的密码,它会重定向到其他页面?我不认为控制台应用程序和GAE之间有任何不同的东西使请求不同!
当您从服务器创建出站 HTTP 请求时,App Engine 有时会执行一些奇怪的操作。根据 JSoup 实现底层请求的方式,可能会发生一些混淆。在幕后,它可能需要使用urlfetch。
您可以在这里尝试的一件事是使用App EngineFlexible。出站请求不会通过 UrlFetch 或 Sockets API 进行传输,因为最终您的应用程序只是在 Google Compute Engine 上运行。
如果您的应用程序没有使用大量 App Engine API,这可能是解决该问题的简单方法。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |