gpt4 book ai didi

java - HttpURLConnection 发布 Android

转载 作者:可可西里 更新时间:2023-11-01 16:40:47 26 4
gpt4 key购买 nike

我正在尝试使用教程 here用我学到的数据here执行 HTTPUrlConnection POST 请求。每次我运行它时,响应都会给出错误消息:“您必须输入用户名!”和“您必须输入密码”。谁能解释为什么服务器无法识别甚至无法获取发布的数据?这是我的代码:

class urlRequest extends AsyncTask<String, String, String> {

protected String doInBackground(String... all) {
URL url;
String response = "";
try {
String requestURL = "https://hac.chicousd.org/LoginParent.aspx?page=GradebookSummary.aspx";
url = new URL(requestURL);

HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setReadTimeout(15000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty( "charset", "utf-8");
conn.setRequestProperty( "Content-Length", Integer.toString(getPostDataString(postDataParams).length()));
conn.setFixedLengthStreamingMode(getPostDataString(postDataParams).length());


JSONObject postDataParams = new JSONObject();
postDataParams.put("checkCookiesEnabled", "true");
postDataParams.put("checkMobileDevice", "false");
postDataParams.put("checkStandaloneMode", "false");
postDataParams.put("checkTabletDevice", "false");
postDataParams.put("portalAccountUsername", "username");
postDataParams.put("portalAccountPassword", "password");

DataOutputStream os = new DataOutputStream(conn.getOutputStream());
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));

writer.write(getPostDataString(postDataParams)); // returns: checkCookiesEnabled=true&checkMobileDevice=false&checkStandaloneMode=false&checkTabletDevice=false&portalAccountUsername=username&portalAccountPassword=password

writer.close();
os.close();

int responseCode=conn.getResponseCode();

if (responseCode == HttpsURLConnection.HTTP_OK) {
String line;
BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((line=br.readLine()) != null) {
response+=line;
Log.i("tag", line);
}
}
else {
response="";
}
} catch (Exception e) {
e.printStackTrace();
}
return response;
}

public String getPostDataString(JSONObject params) throws Exception {

StringBuilder result = new StringBuilder();
boolean first = true;

Iterator<String> itr = params.keys();

while(itr.hasNext()){

String key= itr.next();
Object value = params.get(key);

if (first)
first = false;
else
result.append("&");

result.append(URLEncoder.encode(key, "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(value.toString(), "UTF-8"));

}
return result.toString();
}

最佳答案

使用 POST 发送参数:-

URL url;
URLConnection urlConn;
DataOutputStream printout;
DataInputStream input;
url = new URL (getCodeBase().toString() + "env.tcgi");
urlConn = url.openConnection();
urlConn.setDoInput (true);
urlConn.setDoOutput (true);
urlConn.setUseCaches (false);
urlConn.setRequestProperty("Content-Type","application/json");
urlConn.setRequestProperty("Host", "android.schoolportal.gr");
urlConn.connect();
//Create JSONObject here
JSONObject jsonParam = new JSONObject();
jsonParam.put("portalAccountUsername", "username");
jsonParam.put("portalAccountPassword", "password");

你错过的部分在下面......即,如下......

// Send POST output.
printout = new DataOutputStream(urlConn.getOutputStream ());
printout.writeBytes(URLEncoder.encode(jsonParam.toString(),"UTF-8"));
printout.flush ();
printout.close ();

关于java - HttpURLConnection 发布 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41421519/

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