php - 排球POST字符串請求意外錯誤500




android android-studio (8)

@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不相同

您需要潛在地查看您的 access_log ,並在單擊郵遞員然後單擊截擊客戶端時實時觀看

事實:(為什麼我們可以這麼確定)

我的直覺說您在配置錯誤的服務器中遇到問題。 不管您相信與否,在這種情況下,access_log將為您提供最大的幫助。

無論如何:在您放入POSTMAN中的內容和凌空客戶端發送的內容之間顯然存在一個問題-這是造成此問題的原因。

我所見的原因包括:

  • 可能是 SAME ORIGIN 錯誤。
  • 可能是 INTERNAL SERVER REDIRECT 問題。
  • 從$ _GET到$ _POST的不精確轉發(我在nginx上看到了這個問題)
  • 這可能是一條糟糕的道路問題,正在被 no-redirect 和缺乏安全性所困擾。

但是如果不告訴我們平台或服務器(Windows,Linux,nginx,php-fpm,apache等),我們將無法為您提供幫助

我在項目中使用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)

以下是堆棧跟踪

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();
?>

HTTP狀態代碼 500 代表 internal server error ,明確指出您在客戶端沒有任何問題(在本例中為 Volly ),但問題出在服務器端。 嘗試調試您的服務器端php代碼。 代碼未正確執行,因此在Http響應標頭中返回了 500 internal server errorVolly 只是將接收到的標頭作為錯誤拋出。

如果您是後端開發人員,則應先與 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"}]

如果問題仍未解決,我將發布另一個答案。 在郵遞員中復制所有標題,例如

.addHeader("content-type", "application/json")
.addHeader("cache-control", "no-cache")
.addHeader("postman-token", "fa72f792-c9d3-7891-a544-f37f634f6ee1")

並把它放在volly params中


您的問題可能來自 ContentType

您添加此:

@Override
            public String getBodyContentType() {
                return "application/x-www-form-urlencoded";
            }

要么

return "application/json"

如果問題不能解決,則必須使用 JsonObjectRequest


我修改了一下代碼,並在郵遞員中對其進行了檢查,效果很好。

我將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();

檢查您的 db.php 文件,然後查看返回連接對象的變量。

我看到它應該是 $con->close() 和一個n而不是 $conn->close() 和一個雙n


請檢查您嘗試發送的所有參數是否與服務器期望的相同。 錯誤或缺失的參數也會返回500錯誤。 在您的請求中重新驗證此參數 Company_mobile 。 希望這能解決您的問題。





android-volley