任何人都可以帮我编写一个程序,它将连接到网站,登录并获取已记录网站的内容吗?我希望它适用于网站http://www.imperiaonline.org 有很多重定向和POST请求我不知道是否可能。请帮帮我。
我尝试过类似的东西,但它不起作用......
dateFormat = new SimpleDateFormat(DATE_FORMAT);
store = new ArrayList<Map<String, String>>();
String uRL = "http://www.imperiaonline.org";
StringBuilder response = new StringBuilder();
Log.v("Execute", "execute url:" + uRL);
try {
URL url = new URL(uRL);
HttpURLConnection httpconn = (HttpURLConnection) url
.openConnection();
if (sCookie != null && sCookie.length() > 0) {
httpconn.setRequestProperty("Cookie", sCookie);
}
if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader input = new BufferedReader(
new InputStreamReader(httpconn.getInputStream()), 8192);
String strLine = null;
while ((strLine = input.readLine()) != null) {
response.append(strLine);
}
input.close();
}
String headerName = null;
for (int i = 1; (headerName = httpconn.getHeaderFieldKey(i)) != null; i++) {
if (headerName.equalsIgnoreCase(SET_COOKIE)) {
Map<String, String> cookie = new HashMap<String, String>();
StringTokenizer st = new StringTokenizer(
httpconn.getHeaderField(i), COOKIE_VALUE_DELIMITER);
// the specification dictates that the first name/value pair
// in the string is the cookie name and value, so let's
// handle
// them as a special case:
if (st.hasMoreTokens()) {
String token = st.nextToken();
String name = token.substring(0,
token.indexOf(NAME_VALUE_SEPARATOR));
String value = token.substring(
token.indexOf(NAME_VALUE_SEPARATOR) + 1,
token.length());
store.add(cookie);
cookie.put(name, value);
}
while (st.hasMoreTokens()) {
String token = st.nextToken();
cookie.put(
token.substring(0,
token.indexOf(NAME_VALUE_SEPARATOR))
.toLowerCase(),
token.substring(
token.indexOf(NAME_VALUE_SEPARATOR) + 1,
token.length()));
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
for (int i = 0; i < store.size(); ++i) {
for (String element : store.get(i).keySet()) {
Log.i("ARR", element);
}
}
Log.i("HTML", response.toString());
try {
StringBuilder postDataBuilder = new StringBuilder().append("uname=").append(URLEncoder.encode("zygmunter", "UTF8"));
postDataBuilder.append("password=").append(URLEncoder.encode("zygmunter", "UTF8"));
byte[] postData = null;
postData = postDataBuilder.toString().getBytes();
URL url = new URL("http://www99.imperiaonline.org/imperia/game_v5/game/ajax_login.php");
HttpURLConnection co = (HttpURLConnection) url.openConnection();
co.setDoOutput(true);
co.setRequestMethod("POST");
co.setRequestProperty("Content-Length", Integer.toString(postData.length));
co.setUseCaches(false);
OutputStream out = co.getOutputStream();
out.write(postData);
out.close();
response = new StringBuilder();
if (co.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader input = new BufferedReader(
new InputStreamReader(co.getInputStream()), 8192);
String strLine = null;
while ((strLine = input.readLine()) != null) {
response.append(strLine);
}
input.close();
}
String resp = response.toString();
Log.i("WYNIK", resp);
} catch (IOException ioe) {
ioe.printStackTrace();
}
答案 0 :(得分:1)
看看this示例。
private HttpClient mHttpClient;
private HttpContext mContext;
private CookieStore mCookieStore;
public void post(){
ArrayList<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
list.add(new BasicNameValuePair("uname", "your username"));
list.add(new BasicNameValuePair("password", "your username"));
list.add(new BasicNameValuePair("form_submit", "Login"));
task mTask = new task();
mTask.execute(list);
}
public class task extends AsyncTask<ArrayList<BasicNameValuePair>, Void, String>{
@Override
protected String doInBackground(ArrayList<BasicNameValuePair>... arg0) {
if(mHttpClient == null){
mHttpClient = new DefaultHttpClient();
}
if(mContext == null){
mContext = new BasicHttpContext();
}
if(mCookieStore == null){
mCookieStore = new BasicCookieStore();
}
mContext.setAttribute(ClientContext.COOKIE_STORE, mCookieStore)
String sResponse = "";
HttpResponse response = null;
try{
HttpPost httppost = new HttpPost("http://www99.imperiaonline.org/imperia/game_v5/game/ajax_login.php");
httppost.setEntity(new UrlEncodedFormEntity(arg0[0]));
mHttpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
response = mHttpClient.execute(httppost, mContext);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
StringBuilder s = new StringBuilder();
while ((sResponse = reader.readLine()) != null) {
s = s.append(sResponse);
}
// Getting cookies
ArrayList<Cookie> list = new ArrayList<Cookie>(mCookieStore.getCookies());
for(Cookie cookie : list){
Log.i(TAG, "cookie: " + cookie.getName());
}
}catch(IOException e){
}
return sResponse;
}
@Override
protected void onPostExecute(String result){
System.out.println(result);
}
}