我已將我的dropwizard升級到0.8,使用jetty -9服務器。 我使用排氣服務器1.0.15從我的應用程序發送我的JSON請求。 我的問題是,當我從volley發送任何JSON時拋出400,而當我發送郵遞員的相同請求時,它工作正常。Jetty - 9排除請求錯誤與排球服務器
WARN [2015-05-07 14:16:18223] org.eclipse.jetty.http.HttpParser:非法字符0x16在狀態=開始爲緩衝HeapByteBuffer @ 642bbd0f [p = 1時,L = 78, c = 8192,r = 77] = {\ x16 < < < \ x03 \ x00 \ x00I \ x03 \ x01 \ x00 \ x00E \ x03 \ x00 \ xBfE \ x8e \ x82 \ xCb \ xE3 \ xCa ... \ x07 \ xC0 \ X11 \ X00/\ X005 \ X00 \ X05 \ X00 \ xFfV \ X00 \ X01 \ X00 >>> - 1 \ r \ nContent-Lengt ... \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00} WARN [2015-05-08 14:16:18,223] org.eclipse.jetty.http.HttpParser:badMessage:400非法字符0x16 for HttpChannelOverHttp @ 650d154b {r = 0,c = false,a = IDLE,uri = - }
and my code to make volley request
JSONObject userDetails = new JSONObject();
userDetails.put("email", "tasneem");
userDetails.put("password", "1234");
userDetails.put("deviceId", "243243");
userDetails.put("version", "4.4.4");
userDetails.put("platform", "Android");
JsonObjectRequest loginRequest = new JsonObjectRequest(Request.Method.POST, Constants.URL_LOGIN, userDetails, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e(TAG, volleyError.toString());
mListener.onError(volleyError);
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json; charset=utf-8");
return headers;
}
};
非常感謝您的幫助。謝謝。
誰能告訴我如何跟蹤完整的請求,而無需創建自定義排球請求,有什麼辦法嗎?
該錯誤表示您的客戶端未發送HTTP請求。如果你可以捕獲你的網絡流量(最容易在服務器端),你應該有更多的信息來處理。 –
@JoakimErdfelt,但同樣的抽籤要求以前工作完美,你能告訴我方式截取請求。我無法跟蹤,我能看到的是我發送的請求,看起來很完美。 –
使用像Wireshark這樣的工具來捕獲有問題的流量。錯誤是告訴你(在原始HTTP請求解析期間),Jetty遇到了一個字節0x16(十六進制)並拒絕了請求(因爲該字節在HTTP請求標頭中的每個規範中都是無效的) –