下面是我在Android之外测试的独立java文件的代码,它可以为我工作并返回一个String custID并在控制台中打印它。但是,当我添加要在我的Android项目中使用的文件时,它不会返回相同的数据。
我的文件将数据发布到登录名,然后在验证登录后从URL(www.xxxxxx.com/x.aspx?CustId=12345)获取CustId的值。但是,在Android环境中,执行相同的操作只会返回原始登录页面的URL,就像登录未经过验证一样。
我认为这与我的帖子数据有关?
package podium.raceway;
import java.io.*;
import java.net.*;
import android.util.Log;
public class PodiumConnection
{
private static final String POST_CONTENT_TYPE = "application/x-www-form-urlencoded";
private static final String TARGET_URL = "http://www.clubspeedtiming.com/prkapolei/login.aspx";
public PodiumConnection(){
Log.d("CUSTID", httpPostLogin("oipsl"));
//or System.out.println(httpPostLogin("oipsl"); in non-Android environment
}
/**
* The single public method of this class that
* 1. Prepares a login message
* 2. Makes the HTTP POST to the target URL
* 3. Reads and returns the response
*
* @throws IOException
* Any problems while doing the above.
*
*/
public String httpPostLogin (String user)
{
String response = null;
try
{
// Prepare the content to be written
// throws UnsupportedEncodingException
String urlEncodedContent = preparePostContent(user);
HttpURLConnection urlConnection = doHttpPost(TARGET_URL, urlEncodedContent);
response = readResponse(urlConnection);
}
catch(IOException ioException)
{
System.out.println("Problems encountered.");
}
return response;
}
/**
* Using the given username and password, and using the static string variables, prepare
* the login message. Note that the username and password will encoded to the
* UTF-8 standard.
*
* @param loginUserName
* The user name for login
*
* @param loginPassword
* The password for login
*
* @return
* The complete login message that can be HTTP Posted
*
* @throws UnsupportedEncodingException
* Any problems during URL encoding
*/
private String preparePostContent(String loginUserName) throws UnsupportedEncodingException
{
// Encode the user name and password to UTF-8 encoding standard
// throws UnsupportedEncodingException
String encodedLoginUserName = URLEncoder.encode(loginUserName, "UTF-8");
//Hidden fields also used for verification
String viewState = URLEncoder.encode("/wEPDwULLTIxMTU1NzMyNDgPZBYCAgMPZBYCAgkPPCsADQBkGAEFAmd2D2dkNyI00Mr5sftsfyEsC6YBMNkj9mI=", "UTF-8");
String eventvalidation = URLEncoder.encode("/wEWBAK2l8HDAQKQoJfyDwK6z/31BQLCi9reA4vQxgNI61f/aeA7+HYbm+y+7y3g", "UTF-8");
String content = "__VIEWSTATE="+viewState+"&__EVENTVALIDATION="+eventvalidation+"&tbxEmail=&tbxRacerName="+encodedLoginUserName+"&btnSubmit=Submit";
//System.out.println(content);
return content;
}
/**
* Makes a HTTP POST to the target URL by using an HttpURLConnection.
*
* @param targetUrl
* The URL to which the HTTP POST is made.
*
* @param content
* The contents which will be POSTed to the target URL.
*
* @return
* The open URLConnection which can be used to read any response.
*
* @throws IOException
*/
public HttpURLConnection doHttpPost(String targetUrl, String content) throws IOException
{
HttpURLConnection urlConnection = null;
DataOutputStream dataOutputStream = null;
try
{
// Open a connection to the target URL
// throws IOException
urlConnection = (HttpURLConnection)(new URL(targetUrl).openConnection());
// Specifying that we intend to use this connection for input
urlConnection.setDoInput(true);
// Specifying that we intend to use this connection for output
urlConnection.setDoOutput(true);
// Specifying the content type of our post
urlConnection.setRequestProperty("Content-Type", POST_CONTENT_TYPE);
// Specifying the method of HTTP request which is POST
// throws ProtocolException
urlConnection.setRequestMethod("POST");
// Prepare an output stream for writing data to the HTTP connection
// throws IOException
dataOutputStream = new DataOutputStream(urlConnection.getOutputStream());
// throws IOException
dataOutputStream.writeBytes(content);
dataOutputStream.flush();
dataOutputStream.close();
return urlConnection;
}
catch(IOException ioException)
{
System.out.println("I/O problems while trying to do a HTTP post.");
ioException.printStackTrace();
// Good practice: clean up the connections and streams
// to free up any resources if possible
if (dataOutputStream != null)
{
try
{
dataOutputStream.close();
}
catch(Throwable ignore)
{
// Cannot do anything about problems while
// trying to clean up. Just ignore
}
}
if (urlConnection != null)
{
urlConnection.disconnect();
}
// throw the exception so that the caller is aware that
// there was some problems
throw ioException;
}
}
/**
* Read response from the URL connection
*
* @param urlConnection
* The URLConncetion from which the response will be read
*
* @return
* The response read from the URLConnection
*
* @throws IOException
* When problems encountered during reading the response from the
* URLConnection.
*/
private String readResponse(HttpURLConnection urlConnection) throws IOException
{
BufferedReader bufferedReader = null;
try
{
// Prepare a reader to read the response from the URLConnection
// throws IOException
bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
urlConnection.setInstanceFollowRedirects(false);
urlConnection.connect();
//System.out.println(urlConnection.getHeaderFields());
String url = urlConnection.getURL().toString();
//Gets the custId value from the header
url = url.substring(url.lastIndexOf("CustID=")+7);
return url;
}
catch(IOException ioException)
{
System.out.println("Problems while reading the response");
ioException.printStackTrace();
// throw the exception so that the caller is aware that
// there was some problems
throw ioException;
}
finally
{
// Good practice: clean up the connections and streams
// to free up any resources if possible
if (bufferedReader != null)
{
try
{
// throws IOException
bufferedReader.close();
}
catch(Throwable ignore)
{
// Cannot do much with exceptions doing clean up
// Ignoring all exceptions
}
}
}
}
}