php - 발리 POST 문자열 요청 예기치 않은 오류 500




android android-studio (8)

내 프로젝트에서 Volley 라이브러리를 사용하고 Unexpected response code 500 을 응답으로 받고 있습니다.

나는 stackoverflow를 철저히 검색했지만 여전히 작동하는 솔루션을 찾을 수 없습니다.

다음은 GET 문자열 요청을 작성하는 코드입니다.

        val API = "http://squadtechsolution.com/android/v1/allcompany.php"
        val requestQueue = Volley.newRequestQueue(mActivity)
        val stringRequest = StringRequest(
            Request.Method.GET,
            API,
            Response.Listener { response ->
                Log.i("dxdiag", response)
                mView.onFetchHttpDataResult(true)
                Toast.makeText(context, response, Toast.LENGTH_LONG).show()
            },
            Response.ErrorListener { error ->
                Toast.makeText(context, error.toString(), Toast.LENGTH_LONG).show()
                Log.i("dxdiag", error.printStackTrace().toString())
                mView.onFetchHttpDataResult(false)
            })
        requestQueue.add(stringRequest)

다음은 stacktrace입니다

2019-09-03 17:15:53.237 3308-3892/com.squadtechs.markhor.foodapp 
E/Volley: [194] BasicNetwork.performRequest: Unexpected response code 
500 for 
http://squadtechsolution.com/android/v1/allcompany.php
2019-09-03 17:15:53.243 3308-3351/com.squadtechs.markhor.foodapp 
D/EGL_emulation: eglMakeCurrent: 0xa7d84180: ver 2 0 (tinfo 
0xa7d832b0)
2019-09-03 17:15:53.256 3308-3308/com.squadtechs.markhor.foodapp 
W/System.err: com.android.volley.ServerError
2019-09-03 17:15:53.257 3308-3308/com.squadtechs.markhor.foodapp 
W/System.err:     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:205)2019-09-03 17:15:53.257 3308-3308/com.squadtechs.markhor.foodapp W/System.err:     at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:131)2019-09-03 17:15:53.257 3308-3308/com.squadtechs.markhor.foodapp W/System.err:     at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111)2019-09-03 17:15:53.257 3308-3308/com.squadtechs.markhor.foodapp W/System.err:     at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)

다음은 서버 측에서 작성한 PHP 코드입니다.

<?php
    require 'db.php';

    $sql = "SELECT * FROM `company_profile`";
    $result = $con->query($sql);

    if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {

        $id=$row['id']; 

        $company_name=$row['company_name'];
        $cuisine=$row['cuisine'];
        $conpany_phone=$row['conpany_phone'];
        $company_description=$row['company_description']; 
        $company_logo=$row['company_logo'];
        $company_type=$row['company_type'];
        $delivery_type=$row['delivery_type'];
        $delivery_range=$row['delivery_range']; 
        $delivery_fee=$row['delivery_fee'];
        $delivery_pickupinfo=$row['delivery_pickupinfo'];
        $address=$row['address'];

        $companyData[] = array('id'=> $id,'company_name'=> 
        $company_name,'cuisine'=> $cuisine,'conpany_phone'=> 
        $conpany_phone,'company_description'=> 
        $company_description,'company_logo'=> $company_logo,'company_type'=> 
        $company_type,'delivery_type'=> $delivery_type,'delivery_range'=> 
        $delivery_range,'delivery_fee'=> 
        $delivery_fee,'delivery_pickupinfo'=> $delivery_pickupinfo,'address'=> $address);   
    }
    echo $jsonformat=json_encode($companyData);
    } else {
        echo "0 results";
    }
    $conn->close();
?>

5로 시작하는 HTTP 상태 코드는 오류가 서버 측에 있음을 알려줍니다. 코드 500은 내부 서버 오류로 해석되므로이를 해결하려면 원인을 확인해야합니다. 코드에 실수가있을 수 있습니다.이 경우 error_log를 열어 오류를보고 그에 따라 조치를 취할 수 있습니다.

데이터베이스에 액세스하거나 연결된 mysql 리소스를 초과하는 동시에 열린 연결이 많은 것처럼 서버 기능을 사용할 수 없기 때문에 발생할 수 있습니다.

다른 경우에는 오류가 error_log 파일에 기록되지 않습니다. cpanel을 사용하는 경우 홈페이지의 Metrics (메트릭) 탭에서 Errors (오류)를 열고 서버에 요청한 시간에 따라 확인하십시오. cpanel을 사용하지 않는 경우 해당 서버 로그를 찾으십시오.

이 오른쪽 표시 답변을 따르십시오. 도움이 될 수 있습니다

안드로이드에서 예기치 않은 응답 500을 처리하는 방법


@ Muhammad Faizan은 의심을 무시합니다. 문제 IS 500 서버 오류입니다

이것이 원인입니다

  • POSTMAN과 VOLLEY는 동일하지 않습니다
  • a) PHP 코드에 버그가 or B) 노출되는 환경 설정이 있습니다.

PHP 문제를 진단하려면

PHP에서 error_log 를 열어야합니다. 서버에 따라 다른 방법으로 php.ini 를 error_log로 변경하여 서버에서 시도하는 방법을 설명하기가 까다로울 수 있습니다.

( 고의적으로 여기에서 들었다 )

/*This always works for me:*/

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

/*However, this doesn't make PHP to show parse errors - the only way to show those errors is to modify your php.ini with this line:*/

display_errors = on
/*(if you don't have access to php.ini, then putting this line in .htaccess might work too):*/

php_flag display_errors 1

서버에서 환경 문제를 진단하려면

error_log 가 아무것도 출력하지 않으면 access_log 시도하십시오. 왜? 다른 유형의 요청이 들어 왔을 가능성이 있기 때문에 POSTMAN과 VOLLEY는 동일하지 않습니다.

post_man을 클릭 한 다음 발리 클라이언트를 클릭하면 access_log 잠재적으로보고 실시간으로 확인해야합니다.

사실 : (우리가 왜 그렇게 확신 할 수 있는지)

내 직감은 잘못 구성된 서버에 문제가 있다고 말합니다. 이것이 사실이라면 access_log가 가장 도움이 될 것입니다.

어쨌든 : POSTMAN에 넣는 것과 발리 클라이언트가 보내는 것 사이에는 분명히 문제가 있습니다.

내가 본 것에는 다음이 포함됩니다.

  • 같은 SAME ORIGIN 오류 일 수 있습니다.
  • INTERNAL SERVER REDIRECT 문제 일 수 있습니다.
  • $ _GET을 $ _POST로 부정확하게 전달할 수 있습니다 (nginx에서 해당 문제를 보았습니다)
  • no-redirectno-redirect 보안이 부족하여 잘못된 경로 문제 일 수 있습니다.

그러나 플랫폼이나 서버 (Windows? Linux? nginx? php-fpm? apache? 등)를 알려주지 않으면 우리는 당신을 도울 수 없습니다.


HTTP 상태 코드 500internal server error 나타내며 클라이언트 측 (여기서는 Volly )에 문제가 없지만 서버 측에 문제가 있음을 분명히 나타냅니다. 서버 측 PHP 코드를 디버깅하십시오. 코드가 제대로 실행되지 않아 Http 응답 헤더에 500 internal server error 반환됩니다. Volly 는 수신 된 헤더를 오류로 던졌습니다.

백엔드 개발자 인 경우 모바일 애플리케이션과 통합하기 전에 먼저 REST Clients 시도해야합니다. 당신은 Here 에서 하나를 얻을 수 있습니다. 귀하의 API는 잘 테스트되고 작동 상태에 있어야합니다. 그렇지 않으면 항상 오류가 발생합니다.


PHP 파일에 포함시켜보십시오 :

header('Content-Type: application/json');
header("Access-Control-Allow-Origin: *");

나는 Kotlin과 친숙하지 않지만 Java를 사용하여 나에게 잘 작동하고 있습니다. 코드는 다음과 같습니다.

private void loadRecyclerViewData2(){
        URR_DATA="http://squadtechsolution.com/android/v1/allcompany.php";
        StringRequest stringRequest = new StringRequest(Request.Method.GET,
                URR_DATA,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        System.out.println("****"+response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        System.out.println("***"+error.getMessage());                    }
                });
        requestQueue = Volley.newRequestQueue(Home.this);
        requestQueue.add(stringRequest);
    }

그리고 나는 다음과 같은 출력을 얻습니다.

I/System.out: ****
    [{"id":"1","company_name":"ABC","cuisine":"QATAR","conpany_phone":"4535345","company_description":"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut ","company_logo":"company_logo5d80bac690f2e.png","company_type":"Food","delivery_type":"yes","delivery_range":"55","delivery_fee":"","delivery_pickupinfo":"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, ","address":"33.58539655788556,71.43779296427965"}]

보내려는 모든 매개 변수가 서버가 기대하는 것과 동일한 지 확인하십시오. 또한 잘못되거나 누락 된 매개 변수는 500 오류를 반환합니다. 귀하의 요청으로이 param Company_mobile 을 재확인하십시오. 이것이 문제를 해결하기를 바랍니다.


서버 측 코드에서 아래 줄을 제거하고 확인하십시오.

echo $jsonformat=json_encode($companyData);

우편 배달부도 마찬가지입니다.


이 오류 "500"은 서버 측 오류를 의미합니다.이 오류는 다음과 같은 경우에 발생합니다.

  1. 매개 변수 또는 URL에서 철자가 틀릴 수 있습니다.
  2. 매개 변수 부족.
  3. 또는 서버에서 허용하지 않는 것을 전송하고 있습니다.
  4. 또한 Urls에서 "http : /"또는 "https : /"를 확인하십시오.

API도 Post Man에서는 작동하지만 발리를 사용하는 장치에서는 작동하지 않습니다. 이것이 당신을 도울 수 있기를 바랍니다.


코드를 약간 수정하고 우편 배달부에서 확인했는데 정상적으로 작동합니다.

JSON 인코딩 구문을 if 문에서 옮겼습니다.

// output data of each row
while($row = $result->fetch_assoc()) {

    $id=$row['id']; 

    $company_name=$row['company_name'];
    $cuisine=$row['cuisine'];
    $conpany_phone=$row['conpany_phone'];
    $company_description=$row['company_description']; 
    $company_logo=$row['company_logo'];
    $company_type=$row['company_type'];
    $delivery_type=$row['delivery_type'];
    $delivery_range=$row['delivery_range']; 
    $delivery_fee=$row['delivery_fee'];
    $delivery_pickupinfo=$row['delivery_pickupinfo'];
    $address=$row['address'];

    $companyData[] = array('id'=> $id,'company_name'=> 
    $company_name,'cuisine'=> $cuisine,'conpany_phone'=> 
    $conpany_phone,'company_description'=> 
    $company_description,'company_logo'=> $company_logo,'company_type'=> 
    $company_type,'delivery_type'=> $delivery_type,'delivery_range'=> 
    $delivery_range,'delivery_fee'=> 
    $delivery_fee,'delivery_pickupinfo'=> $delivery_pickupinfo,'address'=> $address);   
}
echo $jsonformat=json_encode($companyData);

$conn->close();




android-volley