1

我已经尝试了几件事,但我的 android 应用程序没有发送帖子参数。我在虚拟设备上运行应用程序。这是代码:

@Override
public void run() {
    try{
        HttpClient client = new DefaultHttpClient();  
        HttpPost post = new HttpPost(page);   

        HttpParams httpParams = client.getParams();
        httpParams.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 20000);

        post.setHeader("Content-type", "application/json");
        post.setHeader("Accept", "application/json");
        JSONObject obj = new JSONObject();
        obj.put("username", "abcd");
        obj.put("password", "1234");
        post.setEntity(new StringEntity(obj.toString(), "UTF-8"));
        HttpResponse response = client.execute(post);
        InputStreamReader isr = new InputStreamReader(response.getEntity().getContent());
        BufferedReader reader = new BufferedReader(isr);
        String line = "";
        while((line = reader.readLine()) != null){
            System.out.println(line);
        }
    }catch(Exception e){
        e.printStackTrace();
    }
}

它应该向 PHP 页面发送一个 post 请求。此页面显示 POST 数组的输出:

<?php
print_r($_POST);
?>

当我运行该应用程序时,它显示一个空数组。

4

3 回答 3

1

那是因为你正在发送 JSON

标准 php $_POST 是从键值对构建的,因此您应该发布 key1=value1&key2=value2

或者你应该从

$HTTP_RAW_POST_DATA

或者

<?php $postdata = file_get_contents("php://input"); ?> 

并使用

json_decode( $postdata );

PHP 不会自动为你解码 json

您还可以使用另一种方法并发布您的 json,例如 data=YourJsonCode

然后使用 json_decode( $_POST['data'] ); 对其进行解码

于 2012-10-05T10:55:08.203 回答
0

尝试发送 url 编码的名称/值对。您还可以使用EntityUtils将响应转换String为您的响应。

HttpClient client = new DefaultHttpClient();  
HttpPost post = new HttpPost(page);

HttpParams httpParams = client.getParams();
httpParams.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 20000);

post.setHeader("Content-Type","application/x-www-form-urlencoded");

List<NameValuePair> formParams = new ArrayList<NameValuePair>();
formParams.add(new BasicNameValuePair("username", "abcd"));
formParams.add(new BasicNameValuePair("password", "1234"));

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams,HTTP.UTF_8);
post.setEntity(entity);
HttpResponse httpResponse = client.execute(post);
System.out.println(EntityUtils.toString(httpResponse.getEntity()));
于 2012-10-05T12:15:37.160 回答
0

问题解决了。有一个重定向所有非 www 页面的 htaccess 文件。

于 2012-12-22T13:33:32.663 回答