在网址末尾添加“ /”会导致重定向发生,因为您的服务器喜欢以“
/”结尾的网址。服务器将您重定向到的URL完全支持POST,但是当客户端根据setRedirecting()调用的行为运行时,客户端将执行GET请求(cURL与-
L开关执行相同的操作)解决方法是要么URL末尾的’/’,或者您自己从响应中获取Location标头,然后手动启动另一个POST请求。
这可以在wireshark中观察到。您可以通过尝试使用浏览器对URL附加一个斜杠的GET请求来测试该理论。这将导致浏览器得到405。这是Android的固定代码,此代码使用简单的修复方法,即在URL后面附加一个“
/”(尚未投入生产):
package com.altaver.demo;import java.io.IOException;import java.io.UnsupportedEncodingException;import org.apache.http.HttpResponse;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.HttpResponseException;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.params.HttpClientParams;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.BasicResponseHandler;import org.apache.http.impl.client.DefaultHttpClient;import org.json.JSONException;import org.json.JSONObject;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.widget.Toast;public class AltaVerDemoActivity extends Activity { private static final String TAG = "MainActivity"; private static final String URL = "http://96.56.2.188/sdz/avReSTfulLogin1/"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); JSonObject jsonObjSend = new JSonObject(); try { jsonObjSend.put("Pass", "sz"); jsonObjSend.put("User", "szechman"); } catch (JSonException e) { // TODO Auto-generated catch block e.printStackTrace(); } HttpClient client = new DefaultHttpClient(); HttpPost httpPostRequest = new HttpPost(URL); httpPostRequest.setHeader("User-Agent", "com.altaver.android_PostJson2"); httpPostRequest.setHeader("Accept", "application/json"); httpPostRequest.setHeader("Content-Type", "application/json"); StringEntity se = null; try { se = new StringEntity(jsonObjSend.toString()); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } httpPostRequest.setEntity(se); HttpResponse response = null; try { response = client.execute(httpPostRequest); } catch (ClientProtocolException e) { // TODO Auto-generated catch block Toast.makeText(getApplicationContext(), "Please check your internet connection", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } BasicResponseHandler responseHandler = new BasicResponseHandler(); String strResponse = null; if (response != null) { try { strResponse = responseHandler.handleResponse(response); } catch (HttpResponseException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } Log.e("AltaVerDemoActivity", "Response: " + strResponse); }}


