我遇到一个奇怪的问题,我找不到解决方案。我重新审视了过去可以正常使用的旧代码,但现在却以某种方式无法正常工作。
该项目是与数据库连接的android应用程序。我有一个登录活动,将在其中执行发布请求以检查用户是否存在于数据库中。问题在于,与发布请求一起发送的参数实际上并未真正发送。
分开放置android代码,我试图分别测试发布请求。我正在将wampserver 3.1.4
与PHP 5.6.3
,MySQL 5.7
和Apache 2.4
结合使用。要从发布请求中检索参数,我正在使用以下代码段:
$username = null;
$password = null;
var_dump($_POST);
if (isset($_POST['PARAM_EMAIL']))
$username = $mysqli->real_escape_string($_POST['PARAM_EMAIL']);
if (isset($_POST['PARAM_PASSWORD']))
$password = $mysqli->real_escape_string($_POST['PARAM_PASSWORD']);
我使用postman
测试请求,并使用var_dump()
检查参数的内容。
这里有一个示例,说明我如何编写请求以及得到了什么结果:
http://192.168.2.103/GestionDesCamions/check.php?PARAM_EMAIL=user@xx.com&PARAM_PASSWORD=xx
<pre class='xdebug-var-dump' dir='ltr'>
<small>C:\wamp64\www\GestionDesCamions\check.php:12:</small>
<b>array</b>
<i>(size=0)</i>
<i>
<font color='#888a85'>empty</font>
</i>
</pre>false
它说发布请求不包含任何参数,因此由于找不到用户,我最终得到了错误。
我使用!empty()而不是isset(),并且得到相同的结果。我测试了其他请求,尤其是GET请求,它们工作正常。知道我该如何解决这个问题?我正在使用Windows 10作为操作系统。
编辑:
这是我在Android应用中使用的POST方法:
public boolean SendToUrl(String strURL,
ArrayList<NameValuePair> nameValuePairs) {
// Creer un buffer
StringBuilder builder = new StringBuilder();
// Creer un client Http
HttpClient client = new DefaultHttpClient();
// Creer un obejet httppost pour utiliser la methode post
HttpPost httppost = new HttpPost(strURL);
try {
// UrlEncodedFormEntit() : An entity composed of a list of
// url-encoded pairs
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// recuperer la reponse
HttpResponse response = client.execute(httppost);
StatusLine statusLine = response.getStatusLine();
// recuperer le ack
int statusCode = statusLine.getStatusCode();
// si ack =200 connexion avec succee
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} else {
// erreur du chargement
Toast.makeText(_mContext, "pas de connexion", Toast.LENGTH_LONG)
.show();
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return Boolean.parseBoolean(builder.toString());
}
答案 0 :(得分:0)
我最近遇到了同样的问题,我不确定何时但在最近某个时候android向php发送发布请求时到达了它。要获取帖子,您必须使用它以字符串形式获取它,然后执行您将要执行的操作。
# Get JSON as a string
$json_str = file_get_contents('php://input');
# Get as an object
$json_obj = json_decode($json_str);
最后一个应用程序我使您可以简单地接收$ _POST,但这已经更改。
答案 1 :(得分:0)
我尝试以不同的方式解决此问题,我稍微更改了我的android代码,并尝试使用库凌空而不是以前使用的方法发送发布请求,并引发了此错误:Unexpected response code 403 for "URL"
参考此topic之后,我找到了一个解决方案,只需在Apache中修改此文档httpd-vhosts.conf
如下:
require local
至Require all granted
。
现在,允许POST请求,甚至可以使用http请求的旧代码片段。谢谢大家的帮助。