Android HttpUrlConnection 发送Post请求 PHP页面$_POST接收不到问题

问题描述:
HttpUrlConnection httpUrlConnection = url.openConnection();
1.设置httpUrlConnection .setRequestProperty("Content-Type","application/json");
2.httpUrlConnection 发送Post请求,请求方式如下

DataOutputStream outStream = null;
        final String PARAMETER_SEPARATOR = "&";
        final String NAME_VALUE_SEPARATOR = "=";


        if ((data != null && data.size() != 0)) {
            outStream = new DataOutputStream(httpUrlConnection.getOutputStream());
        } else {
            return;
        }


        if (data != null) {
            // 首先组拼文本类型的参数
            StringBuilder sb = new StringBuilder();
            for (Map.Entry<String, String> entry : data.entrySet()) {
                sb.append(URLEncoder.encode(entry.getKey(), "utf-8"));
                sb.append(NAME_VALUE_SEPARATOR);
                sb.append(URLEncoder.encode(entry.getValue(), "utf-8"));
                sb.append(PARAMETER_SEPARATOR);
            }
            L.d("postdata merge= " + sb.toString());
            outStream.write(sb.toString().getBytes());
            outStream.flush();
            outStream.close();
        }


3.httpUrlConnection .connect();
4.PHP端采用$_POST方式去获取Post数据
(此处不采用其它方式去获取,例如:file_get_contents("php://input")、GLOBALS['HTTP_RAW_POST_DATA'])“php://input“方式都可以获取到原始数据


结果:取不到Post数据(post数据其实是在httpUrlconnection.getInputStream()是发送到服务器端)
注明:在Servlet端是可以正确获取Post数据,
Servlet这一端用如下实现: 
     InputStream inStream = httpRequest.getInputStream(); 
     ObjectInputStream objInStream = new ObjectInputStream(inStream); 
     Object obj = objInStream.readObject(); 

PHP在取Post数据时是根据相应的Content-Type来获取


解决办法:
在Post请求时去掉Content-Type设置,以默认的内容类型发送 或者设置Content-Type=application/x-www-form-urlencoded


注明:跟connect()放在Post数据之前与之后没有关系,Post数据时会调用getOutputStream(),该方法会打开Http连接,连接打开后,调用connect()会忽略




  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可能是因为你在使用 HttpURLConnection 发送 post 请求时没有正确设置请求头和请求参数。以下是一个简单的示例代码,你可以参考一下: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; public class HttpURLConnectionPostExample { private static final String POST_URL = "http://example.com/api/post"; public static void main(String[] args) throws IOException { URL url = new URL(POST_URL); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setRequestMethod("POST"); con.setRequestProperty("Content-Type", "application/json"); con.setDoOutput(true); String requestBody = "{\"key1\":\"value1\",\"key2\":\"value2\"}"; OutputStream os = con.getOutputStream(); os.write(requestBody.getBytes()); os.flush(); os.close(); int responseCode = con.getResponseCode(); System.out.println("Response Code : " + responseCode); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println(response.toString()); } } ``` 在上述代码中,我们首先创建了一个 `URL` 对象,表示要发送 post 请求的地址。然后我们使用 `HttpURLConnection` 类的 `openConnection()` 方法打开连接,并设置请求方法为 POST,设置请求头为 `Content-Type: application/json`,并将 `doOutput` 属性设置为 `true`,以便我们可以向服务器发送请求体。 接下来,我们将请求体写入输出流,并调用 `flush()` 和 `close()` 方法将其发送到服务器。然后我们使用 `getResponseCode()` 方法获取服务器响应的状态码,并使用 `getInputStream()` 方法获取服务器响应的输入流。最后,我们从输入流读取响应体,并将其转换为字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值