我已經開發了一個小的android應用程序,通過Http協議與服務器通信,使用json對象。如何正確形成Android HttpPost請求 - 服務器響應''406不可接受''
它在我的本地機器上工作得很好,但是當我決定(只是在學習目的)上傳我的PHP腳本到一些免費託管Web服務時,我得到了406錯誤。
我已經做了一些研究,發現它必須是我的HttpPost請求中沒有設置Content-type。但是設置Content-type沒有幫助。
這是Android代碼:
ArrayList<NameValuePair> userData = new ArrayList<NameValuePair>();
userData.add(new BasicNameValuePair("email", userData_email));
userData.add(new BasicNameValuePair("pass", userData_pass));
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 10000);
HttpConnectionParams.setSoTimeout(httpParameters, 10000);
HttpClient client = new DefaultHttpClient(httpParameters);
HttpPost postRequest = new HttpPost(uri);
// I tried this too
// postRequest.setHeader("Content-Type", "application/json");
UrlEncodedFormEntity ent = new UrlEncodedFormEntity(userData);
ent.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
postRequest.setEntity(ent);
HttpResponse response = client.execute(postRequest);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity);
Log.e("SERVER: ", result);
JSONObject json = new JSONObject(result);
userData_fname = json.getString("fname");
userData_lname = json.getString("lname");
userData_age = json.getInt("age");
userData_gender = json.getString("gender");
這是從服務器(真的沒有什麼花哨)代碼:
$mysql_host = 'xxxx';
$mysql_user = 'xxxx';
$mysql_pass = 'xxxx';
$mysql_db = 'xxxx';
if (isset($_POST["email"]) && isset($_POST["pass"])) {
$email = $_POST["email"];
$pass = $_POST["pass"];
if(!mysql_connect($mysql_host, $mysql_user, $mysql_pass) || !mysql_select_db($mysql_db)) {
echo '-1';
}
$query = "SELECT * FROM `users` WHERE `email`='".$email."' AND `password`='".$pass."'";
if($query_run = mysql_query($query)){
$firstname = mysql_result($query_run, 0, 'firstname');
$lastname = mysql_result($query_run, 0, 'lastname');
$age = mysql_result($query_run, 0, 'age');
$gender = mysql_result($query_run, 0, 'gender');
$return_data = array (
'fname' => $firstname,
'lname' => $lastname,
'age' => $age,
'gender' => $gender
);
echo json_encode($return_data);
} else {
echo 'not found';
exit();
}
}
現在,它可能是一些與我的PHP代碼(失蹤可能有些東西),但是因爲我只知道php的基礎知識,所以我在尋求幫助。
預先感謝您。
服務器運行良好。當我從瀏覽器發佈它時,它會返回json字符串。 –
好。也許你的問題是在Http連接。您是否將Internet權限列入清單?它允許你的應用程序打開網絡套接字。讓我知道。 – Emisilve86
<使用權限android:name =「android.permission.INTERNET」/> <使用權限android:name =「android.permission.ACCESS_NETWORK_STATE」/> – Emisilve86