@Ivan_Worker

Как правильно принять данные с сервера?

Здравствуйте, я хотел отправлять запрос через java "приложение"(на данный момент просто кусок кода). После отправки запроса на сайт httpbin.org/post мне всё выводится json ответ, а когда посылаю запрос на файл, который обрабатывает данные введённые пользователем на сайте, то ничего нет. Использую Open Server для проверки всего этого.

Сам сайт:
<form action="test.php" method="POST">
	<input type="text" name="user_name">
	<input type="text" name="user_password">
	<select name="city_id">
		<option value="1">Саратов</option>
		<option value="2">Омск</option>
		<option value="3">СПБ</option>
	</select>
	<input type="submit" value="Отправить данные">
</form>


Обработчик введённых данных:
<?php 

	$fam = $_POST['fam'];
	$lschet = $_POST['lschet'];
	$c_id = $_POST['c_id'];

	$fam = htmlspecialchars($fam);
	$lschet = htmlspecialchars($lschet);
	$c_id = htmlspecialchars($c_id);
	
	echo $fam;
	echo $lschet;
	echo $c_id;

	echo "Hi";

 ?>


Java код:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

public class Main {


    public static void main(String[] args) {
        String urlAress = "http://form/test.php";
        URL url;
        HttpURLConnection httpURLConnection;
        OutputStream os = null;
        InputStreamReader isR = null;
        BufferedReader bfR = null;
        StringBuilder stringBuilder = new StringBuilder();
        try{
            Map<String, String> postArgs = new HashMap<>();
            
            postArgs.put("fam", "SGHfdsgdh");
            postArgs.put("lschet", "123456789101");
            postArgs.put("c_id", "1");
            
            byte[] out = postArgs.toString().getBytes();
            
            url = new URL(urlAress);
            httpURLConnection = (HttpURLConnection)url.openConnection();
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setDoOutput(true);
            httpURLConnection.setDoInput(true);
            
            httpURLConnection.addRequestProperty("User-Agent", "Mozilla/5.0");
            httpURLConnection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            
            httpURLConnection.setConnectTimeout(200);
            httpURLConnection.setReadTimeout(200);
            httpURLConnection.connect();
            
            try{
                os = httpURLConnection.getOutputStream();
                os.write(out);
            } catch(Exception e){
                System.err.print(e.getMessage());
            }
            
            if(HttpURLConnection.HTTP_OK == httpURLConnection.getResponseCode()){
                isR = new InputStreamReader(httpURLConnection.getInputStream());
                bfR = new BufferedReader(isR);
                String line;
                while((line=bfR.readLine()) != null){
                    stringBuilder.append(line);
                }
            }
            //System.out.println(postArgs);
            
            int status = httpURLConnection.getResponseCode();
            System.out.println(status);
            
            System.out.println(stringBuilder);
            
        } catch(MalformedURLException e){
            e.printStackTrace();
        } catch(IOException e ){
            System.err.print(e.getMessage());
        } finally{
            try{
                isR.close();
            } catch(IOException e){
                e.printStackTrace();
            }
            try{
                bfR.close();
            } catch(IOException e){
                e.printStackTrace();
            }
            try{
                os.close();
            } catch(IOException e){
                e.printStackTrace();
            }

        }
    }
    
}
  • Вопрос задан
  • 458 просмотров
Решения вопроса 2
sslion
@sslion
Начнем с того, что твой test.php возвращает не json, а просто данные в текстовом формате отправленные из формы (даже без пробелов), ответ будет примерно такой:
SGHfdsgdh1234567891011 - это то что ты пытаешься отправить из Java

перепиши примерно так:
$data = [];
        $data['fam'] = htmlspecialchars($_POST['fam']);
        $data['lschet'] = htmlspecialchars($_POST['lschet']);
        $data['c_id'] = htmlspecialchars($_POST['c_id']);
        
        echo json_encode($data);


а вот почему у тебя Java-код не работает, тут извини...
Ответ написан
@Ivan_Worker Автор вопроса
Я использовал Okhttp:
import java.io.IOException;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public final class Main {
  private final OkHttpClient client = new OkHttpClient();

  public void run() throws Exception {
    RequestBody formBody = new FormBody.Builder()
        .add("fam", "Opaerg")
        .add("lschet", "1326666")
        .add("c_id", "2")
        .build();
    Request request = new Request.Builder()
        .url("http://form/test.php")
        .post(formBody)
        .build();

    try (Response response = client.newCall(request).execute()) {
      if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

      System.out.println(response.body().string());
    }
  }

  public static void main(String... args) throws Exception {
    new Main().run();
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы