如何发送HttpPost请求到服务器的PHP脚本
这是php代码,我想在Android中使用HttpPost方法。我想请与POST方法一起发送的JSON对象在数据库中的数据现在是匹配如何发送HttpPost请求到服务器的PHP脚本
if(!isset($_POST['data'])) {
echo "FAIL1";
return 'false';
}
$jsonObject = $_POST['data'];
$data = json_decode($jsonObject, true);
if(!is_array($data)) {
print_r($data);
exit;
echo "FAIL2";
return 'false';
}
$UNIQUE_ID = $data['UNIQUE_ID'];
$BAR_CODE = $data['BARCODE'];
$BATCH_CODE = $data['BATCHCODE'];
if(!isset($UNIQUE_ID) || trim($UNIQUE_ID) == '' || !isset($BAR_CODE) || trim($BAR_CODE) == '' || !isset($BATCH_CODE) || trim($BATCH_CODE) == '') {
echo "FAIL3";
return 'false';
}
$link = mysql_connect($db_server,$db_username,$db_pasword) or die("Can not connect to server $db_server.");
mysql_select_db("drugverifier",$link);
$query = "SELECT * FROM drugverifier where unique_id = $UNIQUE_ID AND bar_code = $BAR_CODE AND batch_code = $BATCH_CODE";
echo " TEST4";
$result = mysql_query($query,$link) or die("Can not able to run the query ' $query ' on server $db_server.");
echo "TEST5";
if(mysql_num_rows($result) > 0){
echo "SUCCESS6";
echo 'true';
}
else {
echo "FAILURE7";
echo 'false';
}
我的Android代码:
JSONObject j = new JSONObject();
try {
j.put("BARCODE", "8904017500190");
j.put("BATCHCODE", "220");
j.put("UNIQUE_ID", "9876");
} catch (JSONException e) {
Log.v("@@@@@JSONException", e.getMessage());
}
String url = "http://www.smartcloudinfotech.com/SmartDrugVerifier/verifyBarCode.php";
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(1);
nameValuePair.add(new BasicNameValuePair("data",j.toString()));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
response = httpclient.execute(httpPost);
Log.v("RESPONSE",""+response.toString());
Toast.makeText(this, "RESPONSE in doPOST()"+response.toString(), Toast.LENGTH_SHORT).show();
} catch (UnsupportedEncodingException e) {
Log.v("@@@@@@@@@@@@@@UnsupportedEncodingException", e.getMessage());
} catch (ClientProtocolException e) {
Log.v("@@@@@@@@@ClientProtocolException",e.getMessage());
} catch (IOException e) {
Log.v("@@@@@@@@@@IOException116", e.getMessage());
}
String temp = EntityUtils.toString(response.getEntity());
当我运行变量temp没有按这个计划价值不包含任何价值。 请帮我解决我要出错的地方。
尝试使用BufferedReader
读取HttpEntity
的内容是这样的:
void printResponse(HttpResponse response) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line = "";
while ((line = in.readLine()) != null) {
System.out.println(line);
}
}
编辑
当我使用卷曲你的服务器发出一个帖子,有data=test
,我没有得到任何响应。我认为这是由于这个代码:
if(!is_array($data)) {
print_r($data);
exit;
echo "FAIL2";
return 'false';
}
首先,如果它不是一个数组,你想打印数组。这是没有意义的。 其次,你退出,并回应你的“失败2”。
您正在阅读的响应错在Android中,它是这样
HttpResponse response = httpclient.execute(httppost);
String result = EntityUtils.toString(response.getEntity());
而且我不是一个很大的PHP程序员,但我相信你正在阅读的价值观错在PHP你是不是传递一个JSONArray作为据我所知,你正在传递一个JSONObject。还删除了
print_r($data);
exit;
感谢告诉我,我没有传递json数组。 如果(!is_array($ data)){ print_r($ data);我已经删除了 ; 退出; echo“FAIL2”; 返回'false'; } 这部分,但现在脚本正在返回我“FAIL3”作为回应 – prateek 2012-02-07 05:53:47
您正在尝试获取值为数组$ UNIQUE_ID = $ data ['UNIQUE_ID']; $ BAR_CODE = $ data ['BARCODE']; $ BATCH_CODE = $ data ['BATCHCODE'];这不会工作,因为它不是一个数组。也尝试分开你的支票,看看哪些事情实际上失败了,所以不要把很多||在您的if语句中,单独检查所有内容并发送一个唯一的错误,这样您就可以准确知道错误的位置。 – mbwasi 2012-02-07 12:02:05
它看起来不像你的Android代码,甚至编译,你能够运行Android代码? – 2012-02-06 13:33:28
是的,它编译我已经剥离了这个代码。有些部分可能会像try catch块一样丢失或者类似的东西,是否显示编译时错误..? – prateek 2012-02-06 13:37:05
@NickGarvey @我的朋友之一说我没有得到任何回应可能是因为价值没有传递给脚本 – prateek 2012-02-06 14:04:13