Android

I need an alternative option to HttpClient in Android to send data to PHP as it is no longer supported

Мне нужен альтернативный вариант HttpClient в Android для отправки данных на PHP, поскольку он больше не поддерживается

В настоящее время я использую HttpClient, HttpPost для отправки данных в my PHP server из Android app но все эти методы устарели в API 22 и удалены в API 23, так какие же у него альтернативные варианты?

Я искал везде, но ничего не нашел.

Переведено автоматически
Ответ 1

Я также столкнулся с этой проблемой, для решения которой я создал свой собственный класс. Который основан на java.net и поддерживает до Android API 24, пожалуйста, проверьте это: HttpRequest.java

Используя этот класс, вы можете легко:


  1. Отправить Http GET запрос

  2. Отправить Http POST запрос

  3. Отправить Http PUT запрос

  4. Отправить Http DELETE

  5. Отправить запрос без дополнительных параметров данных и проверить ответ HTTP status code

  6. Добавить пользовательский HTTP Headers в запрос (используя varargs)

  7. Добавьте параметры данных в качестве String запроса к запросу

  8. Добавьте параметры данных как HashMap {ключ = значение}

  9. Принять ответ как String

  10. Принять ответ как JSONObject

  11. Принять ответ в виде byte [] массива байтов (полезно для файлов)

и любая их комбинация - только одной строкой кода)

Вот несколько примеров:

//Consider next request: 
HttpRequest req=new HttpRequest("http://host:port/path");

Пример 1:

//prepare Http Post request and send to "http://host:port/path" with data params name=Bubu and age=29, return true - if worked
req.prepare(HttpRequest.Method.POST).withData("name=Bubu&age=29").send();

Пример 2:

// prepare http get request,  send to "http://host:port/path" and read server's response as String 
req.prepare().sendAndReadString();

Пример 3:

// prepare Http Post request and send to "http://host:port/path" with data params name=Bubu and age=29 and read server's response as JSONObject 
HashMap<String, String>params=new HashMap<>();
params.put("name", "Groot");
params.put("age", "29");
req.prepare(HttpRequest.Method.POST).withData(params).sendAndReadJSON();

Пример 4:

//send Http Post request to "http://url.com/b.c" in background  using AsyncTask
new AsyncTask<Void, Void, String>(){
protected String doInBackground(Void[] params) {
String response="";
try {
response=new HttpRequest("http://url.com/b.c").prepare(HttpRequest.Method.POST).sendAndReadString();
} catch (Exception e) {
response=e.getMessage();
}
return response;
}
protected void onPostExecute(String result) {
//do something with response
}
}.execute();

Пример 5:

//Send Http PUT request to: "http://some.url" with request header:
String json="{\"name\":\"Deadpool\",\"age\":40}";//JSON that we need to send
String url="http://some.url";//URL address where we need to send it
HttpRequest req=new HttpRequest(url);//HttpRequest to url: "http://some.url"
req.withHeaders("Content-Type: application/json");//add request header: "Content-Type: application/json"
req.prepare(HttpRequest.Method.PUT);//Set HttpRequest method as PUT
req.withData(json);//Add json data to request body
JSONObject res=req.sendAndReadJSON();//Accept response as JSONObject

Пример 6:

//Equivalent to previous example, but in a shorter way (using methods chaining):
String json="{\"name\":\"Deadpool\",\"age\":40}";//JSON that we need to send
String url="http://some.url";//URL address where we need to send it
//Shortcut for example 5 complex request sending & reading response in one (chained) line
JSONObject res=new HttpRequest(url).withHeaders("Content-Type: application/json").prepare(HttpRequest.Method.PUT).withData(json).sendAndReadJSON();

Пример 7:

//Downloading file
byte [] file = new HttpRequest("http://some.file.url").prepare().sendAndReadBytes();
FileOutputStream fos = new FileOutputStream("smile.png");
fos.write(file);
fos.close();
Ответ 2

HttpClient был устаревшим и теперь удален:

org.apache.http.client.HttpClient:


Этот интерфейс устарел на уровне API 22. Пожалуйста, используйте вместо этого openConnection (). Пожалуйста, посетите эту веб-страницу для получения дополнительной информации.


означает, что вам следует переключиться на java.net.URL.openConnection().

Смотрите также новую документацию по HttpURLConnection.

Вот как вы могли бы это сделать:

URL url = new URL("http://some-server");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");

// read the response
System.out.println("Response Code: " + conn.getResponseCode());
InputStream in = new BufferedInputStream(conn.getInputStream());
String response = org.apache.commons.io.IOUtils.toString(in, "UTF-8");
System.out.println(response);

IOUtils документация: Apache Commons IO

IOUtils Зависимость от Maven: http://search.maven.org/#artifactdetails/org.apache.commons/commons-io/1.3.2/jar

Ответ 3

Следующий код находится в AsyncTask:

В моем фоновом процессе:

String POST_PARAMS = "param1=" + params[0] + "&param2=" + params[1];
URL obj = null;
HttpURLConnection con = null;
try {
obj = new URL(Config.YOUR_SERVER_URL);
con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");

// For POST only - BEGIN
con.setDoOutput(true);
OutputStream os = con.getOutputStream();
os.write(POST_PARAMS.getBytes());
os.flush();
os.close();
// For POST only - END

int responseCode = con.getResponseCode();
Log.i(TAG, "POST Response Code :: " + responseCode);

if (responseCode == HttpURLConnection.HTTP_OK) { //success
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();

while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();

// print result
Log.i(TAG, response.toString());
} else {
Log.i(TAG, "POST request did not work.");
}
} catch (IOException e) {
e.printStackTrace();
}

Ссылка:
http://www.journaldev.com/7148/java-httpurlconnection-example-to-send-http-getpost-requests

Ответ 4

Это решение, которое я применил к проблеме, из-за которой httpclient устарел в этой версии Android 22`

 public static final String USER_AGENT = "Mozilla/5.0";



public static String sendPost(String _url,Map<String,String> parameter) {
StringBuilder params=new StringBuilder("");
String result="";
try {
for(String s:parameter.keySet()){
params.append("&"+s+"=");

params.append(URLEncoder.encode(parameter.get(s),"UTF-8"));
}


String url =_url;
URL obj = new URL(_url);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", USER_AGENT);
con.setRequestProperty("Accept-Language", "UTF-8");

con.setDoOutput(true);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(con.getOutputStream());
outputStreamWriter.write(params.toString());
outputStreamWriter.flush();

int responseCode = con.getResponseCode();
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Post parameters : " + params);
System.out.println("Response Code : " + responseCode);

BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();

while ((inputLine = in.readLine()) != null) {
response.append(inputLine + "\n");
}
in.close();

result = response.toString();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}finally {
return result;
}

}
2023-05-20 06:40 java android