好的,伙计们,所以我最近正在开发一款将用户ID和PASSWORD保存到SharedPreferences的android应用。现在,当用户第二次启动应用程序时,将使用listView中的一些选项将他直接重定向到MainActivity。现在,我头疼极了,这让我真正的疯狂。我无法登录网站并将数据提取到手机中。我已经尝试使用Http(s)UrlConnection,HttpClient,但这似乎对我不起作用。我从POST方法获得的只是登录页面的源代码。
现在,有一个登录页面:https :
//medeine.vgtu.lt/studentams/login.jsp?klb=en
和我的目标页面:https :
//medeine.vgtu.lt/studentams/pask_stud.jsp
<-我需要从那里获取数据
您有任何想法或技巧/方法/指南/如何做吗?
为此,您必须发送两个POST请求。在第一个请求中,成功登录后,您需要发送登录数据并保存cookie。在第二个请求中,您需要发送已保存的cookie,您可以获取数据。POST的数据必须采用以下格式:var
= value&var2 = value2
在您的情况下:
String data = "studKnNr=login&asmKodas=password";
以及请求网址:https :
//medeine.vgtu.lt/studentams/submit.jsp
请参见以下代码:
String data = "studKnNr=login&asmKodas=password";
String loginUrl = "https://medeine.vgtu.lt/studentams/submit.jsp";
String Login = POST_req(loginUrl, data, 10000); /*last parameter is a limit of page content length*/
//And after succcessful login you can send the second request:
String pageContent = POST_req(someUrl, "", 10000);
//Methods for sending requests and saving cookie:
//(this doesn't need any changes, you can just paste it in your project)
public String POST_req(String url, String post_data, int len) {
URL addr = null;
try {
addr = new URL(url);
} catch (MalformedURLException e) {
return "Incorrect URL";
}
StringBuffer data = new StringBuffer();
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) addr.openConnection();
} catch (IOException e) {
return "Open connection error";
}
conn.setRequestProperty("Connection", "keep-alive");
conn.setRequestProperty("Accept-Language", "ru,en-GB;q=0.8,en;q=0.6");
conn.setRequestProperty("Accept-Charset", "utf-8");
conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
conn.setRequestProperty("Cookie", "");
conn.setDoOutput(true);
conn.setDoInput(true);
//conn.setInstanceFollowRedirects(true);
set_cookie(conn);
//POST data:
String post_str = post_data;
data.append(post_str);
try {
conn.connect();
} catch (IOException e) {
return "Connecting error";
}
DataOutputStream dataOS = null;
try {
dataOS = new DataOutputStream(conn.getOutputStream());
} catch (IOException e2) {
return "Out stream error";
}
try {
((DataOutputStream) dataOS).writeBytes(data.toString());
} catch (IOException e) {
return "Out stream error 1";
}
/*If redirect: */
int status;
try {
status = conn.getResponseCode();
} catch (IOException e2) {
return "Response error";
}
if (status == HttpURLConnection.HTTP_MOVED_TEMP || status == HttpURLConnection.HTTP_MOVED_PERM || status == HttpURLConnection.HTTP_SEE_OTHER) {
String new_url = conn.getHeaderField("Location");
String cookies = conn.getHeaderField("Set-Cookie");
URL red_url;
try {
red_url = new URL(new_url);
} catch (MalformedURLException e) {
return "Redirect error";
}
try {
conn = (HttpURLConnection) red_url.openConnection();
} catch (IOException e) {
return "Redirect connection error";
}
//conn.setRequestProperty("Content-type", "text/html");
conn.setRequestProperty("Connection", "keep-alive");
conn.setRequestProperty("Accept-Language", "ru,en-GB;q=0.8,en;q=0.6");
conn.setRequestProperty("Accept-Charset", "utf-8");
conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
conn.setRequestProperty("Cookie", cookies);
conn.setDoOutput(true);
conn.setDoInput(true);
//conn.setInstanceFollowRedirects(true);
}
java.io.InputStream in = null;
try {
in = (java.io.InputStream) conn.getInputStream();
} catch (IOException e) {
return "In stream error";
}
InputStreamReader reader = null;
try {
reader = new InputStreamReader(in, "UTF-8");
} catch (UnsupportedEncodingException e) {
return "In stream error";
}
char[] buf = new char[len];
try {
reader.read(buf);
} catch (IOException e) {
return "In stream error";
}
get_cookie(conn);
return (new String(buf));
}
public void get_cookie(HttpURLConnection conn) {
SharedPreferences sh_pref_cookie = getSharedPreferences("cookies", Context.MODE_PRIVATE);
String cook_new;
String COOKIES_HEADER;
if (conn.getHeaderField("Set-Cookie") != null) {
COOKIES_HEADER = "Set-Cookie";
}
else {
COOKIES_HEADER = "Cookie";
}
cook_new = conn.getHeaderField(COOKIES_HEADER);
if (cook_new.indexOf("sid", 0) >= 0) {
SharedPreferences.Editor editor = sh_pref_cookie.edit();
editor.putString("Cookie", cook_new);
editor.commit();
}
}
public void set_cookie(HttpURLConnection conn) {
SharedPreferences sh_pref_cookie = getSharedPreferences("cookies", Context.MODE_PRIVATE);
String COOKIES_HEADER = "Cookie";
String cook = sh_pref_cookie.getString(COOKIES_HEADER, "no_cookie");
if (!cook.equals("no_cookie")) {
conn.setRequestProperty(COOKIES_HEADER, cook);
}
}
当然,您必须在异步线程中发送请求。
希望对您有所帮助。请原谅我的英语不好:)
问题内容: 我需要从网站下载图像,并且具有登录名和密码,但是如果我仅使用URL下载图像,它将抛出异常:会话中没有任何值。 我想我需要登录该网站,然后才能以编程方式下载该图像。 你有什么解决办法 ?提前致谢 ! 问题答案: 我想提到HtmlUnit。这是一个无头浏览器,带有Java脚本。
有什么方法可以获得手机当前运行的API版本吗?
问题内容: 我正在尝试编写一个可以自动登录Facebook的Java程序。 到目前为止,我已经获得了下面的代码,可以将主页html页面下载到String中,但是不知道如何发送电子邮件和密码来登录Facebook?Java程序还需要处理返回的Cookie才能保持登录状态吗? } 更新: 我已经使用htmlUnit尝试了以下代码,但是出现以下异常: 有人知道为什么吗? 问题答案: 您应该看一下HTML
问题内容: 我想在注册过程结束后立即登录用户,而无需通过登录表单。 这可能吗 ?我已经找到了的解决方案,但是我没有在我实际从事的项目中使用它。 这是我的security.yml,我正在使用两个防火墙。纯文本编码器仅用于测试。 问题答案: 是的,您可以通过类似于以下内容的方式执行此操作: 当您在上下文中设置令牌时,最后不会自动触发事件,而通常在使用登录表单或类似方法时触发。因此,将其包含在此处的原因
问题内容: 我想使用python下载和解析网页,但是要访问它,我需要设置一些cookie。因此,我需要先通过https登录到网页。登录时刻涉及将两个POST参数(用户名,密码)发送到/login.php。在登录请求期间,我想从响应头中检索cookie并将其存储,以便可以在请求中使用它们来下载/data.php网页。 我将如何在python(最好是2.6)中做到这一点?如果可能,我只想使用内置模块。
问题内容: 我必须将文件上传到服务器,该服务器仅使用文件上传按钮(通过http)公开jsf网页。我必须自动执行一个过程(作为Java独立过程完成),该过程生成一个文件并将该文件上传到服务器。可悲的是,必须将文件上传到的服务器不提供FTP或SFTP。有没有办法做到这一点? 谢谢,里奇 问题答案: 以编程方式提交JSF生成的表单时,需要确保考虑以下三点: 维护HTTP会话(肯定是网站是否启用了JSF服