#php #android #tcp #httpurlconnection
#php #Android #tcp #httpurlconnection
Вопрос:
Я разрабатываю приложение в android studio, и я разместил свой API в облаке AWS EC2, мой API написан на языке PHP, все работает нормально, когда я делаю запрос POST в своем API
но я хочу перенести свой API из облака EC2 на хостинг Godaddy.
Но когда я делаю post-запрос в Godaddy hosted API, все работает нормально для 10-15 запросов, но после 10-15 запросов он возвращает мне эту ошибку.
unexpected end of stream on com.android.okhttp.Address@eca65bcc
Ошибка произошла случайным образом, когда я делаю post-запрос на Godaddy hosted API.
Через 10-20 секунд API, размещенный на Godaddy, снова работает нормально.
Но эта ошибка не произошла в размещенном AWS API.
Пожалуйста, подскажите мне решение или я делаю что-то не так?
Мой план хостинга Godaddy : Ultimate Hosting
Мой код подключения к API Android —
URL url = new URL(api_url);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
String post_data = URLEncoder.encode("key","UTF-8") "=" URLEncoder.encode("value","UTF-8");
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setRequestProperty("Connection", "close"); // I try this for close connection after api call but its not working
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
OutputStream outputStream = httpURLConnection.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8));
bufferedWriter.write(post_data);
bufferedWriter.flush();
bufferedWriter.close();
outputStream.close();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.ISO_8859_1));
StringBuilder result = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null){
result.append(line);
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
return result.toString();
Мой код PHP API :
extract($_POST);
//my rest code heare
...
...
echo json_encode($response)
Полный код ошибки :
2021-01-02 15:01:10.455 29700-30863/com.dailygame.app W/System.err: java.io.IOException: unexpected end of stream on com.android.okhttp.Address@eca65bcc
2021-01-02 15:01:10.456 29700-30863/com.dailygame.app W/System.err: at com.android.okhttp.internal.http.Http1xStream.readResponse(Http1xStream.java:410)
2021-01-02 15:01:10.456 29700-30863/com.dailygame.app W/System.err: at com.android.okhttp.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:146)
2021-01-02 15:01:10.456 29700-30863/com.dailygame.app W/System.err: at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:900)
2021-01-02 15:01:10.457 29700-30863/com.dailygame.app W/System.err: at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:772)
2021-01-02 15:01:10.458 29700-30868/com.dailygame.app D/OpenGLRenderer: makeCurrent EglSurface : 0x700720ae00 -> 0x701b4dcf80
2021-01-02 15:01:10.457 29700-30863/com.dailygame.app W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:493)
2021-01-02 15:01:10.459 29700-30863/com.dailygame.app W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:429)
2021-01-02 15:01:10.459 29700-30863/com.dailygame.app W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:252)
2021-01-02 15:01:10.461 29700-30863/com.dailygame.app W/System.err: at com.dailygame.app.BackgroundWorker.doInBackground(BackgroundWorker.java:990)
2021-01-02 15:01:10.462 29700-30863/com.dailygame.app W/System.err: at com.dailygame.app.BackgroundWorker.doInBackground(BackgroundWorker.java:35)
2021-01-02 15:01:10.463 29700-30863/com.dailygame.app W/System.err: at android.os.AsyncTask$3.call(AsyncTask.java:378)
2021-01-02 15:01:10.463 29700-30863/com.dailygame.app W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2021-01-02 15:01:10.464 29700-30868/com.dailygame.app D/OpenGLRenderer: makeCurrent EglSurface : 0x701b4dcf80 -> 0x700720ae00
2021-01-02 15:01:10.466 29700-30863/com.dailygame.app W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
2021-01-02 15:01:10.467 29700-30863/com.dailygame.app W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2021-01-02 15:01:10.467 29700-30863/com.dailygame.app W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2021-01-02 15:01:10.467 29700-30863/com.dailygame.app W/System.err: at java.lang.Thread.run(Thread.java:919)
2021-01-02 15:01:10.468 29700-30863/com.dailygame.app W/System.err: Caused by: java.io.EOFException: n not found: size=0 content=...
2021-01-02 15:01:10.468 29700-30863/com.dailygame.app W/System.err: at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:212)
2021-01-02 15:01:10.468 29700-30863/com.dailygame.app W/System.err: at com.android.okhttp.internal.http.Http1xStream.readResponse(Http1xStream.java:395)
2021-01-02 15:01:10.468 29700-30863/com.dailygame.app W/System.err: ... 14 more
Комментарии:
1. Можете ли вы предоставить информацию о своем сервере godaddy? и есть ли какой-либо код, который закрывает соединение перед последним эхом, и почему вы не используете exit или die после последнего эха?
2. я уже пробовал выйти или умереть, но это не работает. Я также разговариваю с командой godaddy, они сказали мне, что с нашей стороны нет проблем с вашей проблемой api. Я не знаю, как закрыть соединение после echo.