gpt4 book ai didi

java - Apache Http 客户端帮助 (POST)

转载 作者:行者123 更新时间:2023-12-02 08:13:49 25 4
gpt4 key购买 nike

我在尝试从 java 程序登录我的学校网站时遇到了很大的麻烦。 https://ic.pausd.org/campus/portal/paloalto.jsp

    import java.net.*;
import java.io.*;

public class JavaHttpConnect
{
private static final String POST_CONTENT_TYPE = "application/x-www-form-urlencoded";
private static final String LOGIN_ACTION_NAME = "Log In";
private static final String LOGIN_USER_NAME_PARAMETER_NAME = "username";
private static final String LOGIN_PASSWORD_PARAMETER_NAME = "password";

private static final String LOGIN_USER_NAME = "test";
private static final String LOGIN_PASSWORD = "test";

private static final String TARGET_URL = "https://ic.pausd.org/campus/portal/paloalto.jsp";

public static void main (String args[])
{
JavaHttpConnect httpUrlBasicAuthentication = new JavaHttpConnect();
httpUrlBasicAuthentication.httpPostLogin();
}

/**
* 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 void httpPostLogin ()
{
try
{
// Prepare the content to be written
// throws UnsupportedEncodingException
String urlEncodedContent = preparePostContent(LOGIN_USER_NAME, LOGIN_PASSWORD);

HttpURLConnection urlConnection = doHttpPost(TARGET_URL, urlEncodedContent);

String response = readResponse(urlConnection);

System.out.println("Successfully made the HTPP POST.");
System.out.println("Recevied response is: '/n" + response + "'");

}
catch(IOException ioException)
{
System.out.println("Problems encounterd.");
}
}

/**
* 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, String loginPassword) throws UnsupportedEncodingException
{
// Encode the user name and password to UTF-8 encoding standard
// throws UnsupportedEncodingException
String encodedLoginUserName = URLEncoder.encode(loginUserName, "UTF-8");
String encodedLoginPassword = URLEncoder.encode(loginPassword, "UTF-8");

String content = "login=" + LOGIN_ACTION_NAME +" &" + LOGIN_USER_NAME_PARAMETER_NAME +"="
+ encodedLoginUserName + "&" + LOGIN_PASSWORD_PARAMETER_NAME + "=" + encodedLoginPassword;

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()));
String responeLine;

// Good Practice: Use StringBuilder in this case
StringBuilder response = new StringBuilder();

// Read untill there is nothing left in the stream
// throws IOException
while ((responeLine = bufferedReader.readLine()) != null)
{
response.append(responeLine);
}

return response.toString();
}
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
}
}

}
}
}

我不明白为什么在响应中我没有在网站的 html 代码中收到“错误的用户名和/或密码”

请问有什么帮助吗?谢谢

最佳答案

这可能是因为您的 LOGIN_ACTION_NAME“登录”包含空格。您可能还必须对其进行 UrlEncode..

关于java - Apache Http 客户端帮助 (POST),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6839094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com