当前位置: 首页 > 面试题库 >

Android JSON HttpClient使用HttpResponse将数据发送到PHP服务器

严令秋
2023-03-14
问题内容

我目前正在尝试从Android应用程序向php服务器发送数据(两者均由我控制)。

应用程序中的表单上收集了很多数据,这些数据已写入数据库。所有这一切。

在我的主代码中,首先我创建一个JSONObject(在此示例中,我已在此处将其裁剪):

JSONObject j = new JSONObject();
j.put("engineer", "me");
j.put("date", "today");
j.put("fuel", "full");
j.put("car", "mine");
j.put("distance", "miles");

接下来,我将对象传递给发送对象,并接收响应:

String url = "http://www.server.com/thisfile.php";
HttpResponse re = HTTPPoster.doPost(url, j);
String temp = EntityUtils.toString(re.getEntity());
if (temp.compareTo("SUCCESS")==0)
{
    Toast.makeText(this, "Sending complete!", Toast.LENGTH_LONG).show();
}

HTTPPoster类:

public static HttpResponse doPost(String url, JSONObject c) throws ClientProtocolException, IOException 
{
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost request = new HttpPost(url);
    HttpEntity entity;
    StringEntity s = new StringEntity(c.toString());
    s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
    entity = s;
    request.setEntity(entity);
    HttpResponse response;
    response = httpclient.execute(request);
    return response;
}

这将获得响应,但是服务器返回403-禁止响应。

我试过稍微更改doPost函数(实际上好一点,正如我说的,我有很多东西要发送,基本上是3个具有不同数据的相同表单-
所以我创建了3个JSONObject,每个表单项一个-条目来自数据库而不是我使用的静态示例)。

首先,我将通话更改了一点:

String url = "http://www.myserver.com/ServiceMatalan.php";
Map<String, String> kvPairs = new HashMap<String, String>();
kvPairs.put("vehicle", j.toString());
// Normally I would pass two more JSONObjects.....
HttpResponse re = HTTPPoster.doPost(url, kvPairs);
String temp = EntityUtils.toString(re.getEntity());
if (temp.compareTo("SUCCESS")==0)
{
    Toast.makeText(this, "Sending complete!", Toast.LENGTH_LONG).show();
}

好的,对doPost函数的更改如下:

public static HttpResponse doPost(String url, Map<String, String> kvPairs) throws ClientProtocolException, IOException 
{
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(url);
    if (kvPairs != null && kvPairs.isEmpty() == false) 
    {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(kvPairs.size());
        String k, v;
        Iterator<String> itKeys = kvPairs.keySet().iterator();
        while (itKeys.hasNext()) 
        {
            k = itKeys.next();
            v = kvPairs.get(k);
            nameValuePairs.add(new BasicNameValuePair(k, v));
        }             
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    }
    HttpResponse response;
    response = httpclient.execute(httppost);
    return response;
}

好的,这将返回响应200

int statusCode = re.getStatusLine().getStatusCode();

但是,服务器上接收到的数据无法解析为JSON字符串。我认为它的格式有误(这是我第一次使用JSON):

如果在php文件中,我在$ _POST [‘vehicle’]上执行回显,则得到以下信息:

{\"date\":\"today\",\"engineer\":\"me\"}

谁能告诉我我哪里出问题了,或者是否有更好的方法来实现我的目标?希望以上是有道理的!


问题答案:

经过大量阅读和搜索之后,我发现问题出在哪里,我相信在服务器上启用了magic_quotes_gpc。

因此,使用:

json_decode(stripslashes($_POST['vehicle']));

在上面的示例中,删除了斜杠,并允许对JSON进行正确解码。

仍然不确定为什么发送StringEntity会导致403错误?



 类似资料:
  • 问题内容: 我正在使用arzoo的Flight API。服务器必须在简单的POST请求中接收发布的数据。为此,我使用了PHP cURL。API文档中明确提到数据应以以下格式发送: 我在变量$ xml中使用了上面的代码。我的PHP cURL代码如下: 我没有得到任何回应。我已经与API Provider讨论过同样的问题,但是他们在日志中发现了空请求。我到底想念什么吗?您的答复将不胜感激。谢谢。 问题

  • 我一直在做这个项目,其中一个部分包括从Raspberry向我的服务器发送一些数据。但它不能正常工作,我不知道为什么。我试图通过删除“urllib2”并使用“request”来修复错误。但徒劳的是,一切都没有改变。如果有人能帮助我,我会非常感激的。谢谢! PHP代码: python代码:

  • 问题内容: 最近5个小时,我一直在尝试将json对象发布到PHP脚本中。我已经阅读了所有文档,似乎代码应该可以,但事实并非如此。发出并接收到请求,但是我无法访问发布的json数据,甚至不知道它是否已正确发送。我不断得到一个空的php数组,而不是json数据。 这是php脚本(test.php) 我正在使用来自https://github.com/pokeb/asi-http- request.gi

  • 问题内容: 我在通过Notification从服务向活动发送数据时遇到问题,我单击了一个活动被调用的通知,但是当我尝试通过捆绑包添加一些参数时,我无法获得所谓的intent中的参数,我经历了链接 如何将通知单击中的参数发送到活动? 但是仍然没有运气。 其他人也发生过同样的问题吗? 提前致谢。 问题答案: 您还必须修改清单文件。 这是有效的示例: 这些变量和方法是Service类的成员: 这是Mai

  • 我正在尝试从Android向我的php服务器提交数据。然而,所有的答案似乎都使用了不推荐使用的ApacheHTTP库。我不想用它,当我试着用的时候,它不起作用。 现在它似乎什么也没做。它似乎连接到web服务器,但服务器不写入任何数据。如果我只是用浏览器访问url,它会写入一个文件。 php代码是 然后在Android studio中,我会在按下按钮后放入所有代码

  • 我正在尝试使用POST提交表单,但我有一些来自 标记的额外数据,这些数据已存储到JS对象中。当我从JavaScript中点击时,我想把它发送到服务器。 我尝试做的是用事件发送