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 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"}]
如果問題仍未解決,我將發布另一個答案。 在郵遞員中復制所有標題,例如
.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
。
希望這能解決您的問題。