我对PHP、JavaScript和许多其他脚本语言很有经验,但我对Java或Android没有太多经验。
我正在寻找一种方法将POST数据发送到PHP脚本并显示结果。
我对PHP、JavaScript和许多其他脚本语言很有经验,但我对Java或Android没有太多经验。
我正在寻找一种方法将POST数据发送到PHP脚本并显示结果。
当前回答
对我来说,接下来的工作是:
private sendData() {
JSONObject jsonObject = new JSONObject();
jsonObject.accumulate("key1", value1);
jsonObject.accumulate("key2", value2);
boolean success = sendPost(SERVER_URL + "/v1/auth", jsonObject);
}
private boolean sendPost(String url, JSONObject parameters) {
boolean requestResult = false;
InputStream inputStream = null;
String result = "";
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
String json = "";
json = parameters.toString();
StringEntity se = new StringEntity(json);
httpPost.setEntity(se);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
HttpResponse httpResponse = httpclient.execute(httpPost);
inputStream = httpResponse.getEntity().getContent();
if (inputStream != null) {
result = convertInputStreamToString(inputStream);
requestResult = true;
} else {
result = "Did not work!";
requestResult = false;
}
System.out.println(result);
} catch (Exception e) {
Log.d("InputStream", e.getLocalizedMessage());
requestResult = false;
}
return requestResult;
}
其他回答
@primpop的答案,我会添加如何转换字符串中的响应:
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
String result = RestClient.convertStreamToString(instream);
Log.i("Read from server", result);
}
下面是一个convertStramToString的例子。
最好使用Apache Commons HttpClient,它已经包含在android中了。 看一看 Android开发人员:Apache HTTP客户端包摘要 一般API信息。
对我来说,接下来的工作是:
private sendData() {
JSONObject jsonObject = new JSONObject();
jsonObject.accumulate("key1", value1);
jsonObject.accumulate("key2", value2);
boolean success = sendPost(SERVER_URL + "/v1/auth", jsonObject);
}
private boolean sendPost(String url, JSONObject parameters) {
boolean requestResult = false;
InputStream inputStream = null;
String result = "";
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
String json = "";
json = parameters.toString();
StringEntity se = new StringEntity(json);
httpPost.setEntity(se);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
HttpResponse httpResponse = httpclient.execute(httpPost);
inputStream = httpResponse.getEntity().getContent();
if (inputStream != null) {
result = convertInputStreamToString(inputStream);
requestResult = true;
} else {
result = "Did not work!";
requestResult = false;
}
System.out.println(result);
} catch (Exception e) {
Log.d("InputStream", e.getLocalizedMessage());
requestResult = false;
}
return requestResult;
}
下面是一个完整的解决方案,它运行在后台线程中,向Web API发送一个HTTPS POST多部分请求。实际测试和工作代码。注意:“\n”字符需要在顶部的“最终字符串”中进行正确的请求格式化。
我有困难要么理解,转换,或完成以上解决方案,我的多部分POST需求。
@Override
protected Integer doInBackground(String... files) {
final String MULTIPART_BOUNDARY = "xxYYzzSEPARATORzzYYxx";
final String MULTIPART_SEPARATOR = "--" + MULTIPART_BOUNDARY + "\n";
final String MULTIPART_FORM_DATA = "Content-Disposition: form-data; name=\"%s\"\n\n";
final String FORM_DATA_FILE1 = "file1";
final String FORM_DATA_FILE2 = "file2";
OutputStream outputStream;
Integer responseCode = 0;
try {
URL url = new URL("https://www.example.com/api/endpoint?n1=v1&n2=v2");
HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
urlConnection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + MULTIPART_BOUNDARY);
urlConnection.setConnectTimeout(6000);
urlConnection.setRequestMethod("POST");
urlConnection.setDoOutput(true);
outputStream = new BufferedOutputStream(urlConnection.getOutputStream());
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8));
writer.write(MULTIPART_SEPARATOR);
writer.write(String.format(MULTIPART_FORM_DATA, FORM_DATA_FILE1));
writer.write(files[0]);
writer.write(MULTIPART_SEPARATOR);
writer.write(String.format(MULTIPART_FORM_DATA, FORM_DATA_FILE2));
writer.write(files[1]);
writer.write(MULTIPART_SEPARATOR);
writer.flush();
writer.close();
outputStream.close();
urlConnection.connect();
responseCode = urlConnection.getResponseCode();
Log.d("ResponseCode:", String.valueOf(responseCode));
urlConnection.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
return responseCode;
}
您可以使用WebServer类POST一个HttpRequest,并在其侦听器接口中跟踪响应。
WebServer server=new WebServer(getApplicationContext());
server.setOnServerStatusListner(new WebServer.OnServerStatusListner() {
@Override
public void onServerResponded(String responce) {
}
@Override
public void onServerRevoked() {
}
});
现在创建一个DataRack来绑定数据
List<DataRack> racks=new ArrayList<DataRack>();
racks.add(new DataRack("name","Simon"));
racks.add(new DataRack("age","40"));
racks.add(new DataRack("location","Canada"));
现在只需发送带有该机架的POST请求
server.connectWithPOST(MainActivity.this,"http://sangeethnandakumar.esy.es/PROJECTS/PUBLIC_SERVICE/posttest.php",racks);
你需要包括我的库。文件在这里