SSL打开后$ _POST值消失

时间:2012-02-26 19:47:40

标签: php android json ssl

在android中,我尝试以json结构发送到Web服务器。它适用于http。但是使用https,$ _POST值对消失了。在PHP中,var_dump $ _POST返回数组(0) 但是,HttpGet适用于http和https。

        MyHttpClient httpClient = new MyHttpClient(context);

        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

2 个答案:

答案 0 :(得分:2)

  

如果我设置了HttpClientParams.setRedirecting(params,false);然后是页面   返回“临时断开链接已修复”

听起来您正在将您的请求发送到http://网址并指望重定向(可能通过mod_rewrite或类似的东西,例如PHP代码本身中的重定向)来翻页进入https

此操作模式首先向服务器发出纯HTTP请求,然后告知客户端资源已移至https://地址。反过来,如果激活了自动重定向,则客户端会发出第二个请求。

根据the HTTP specification, for status codes 301 or 302(用于重定向),

  

如果收到301/302状态代码以响应除以外的请求   GET或HEAD,用户代理不得自动重定向   除非可以由用户确认,否则请求,因为这可能   改变发出请求的条件。

大多数浏览器将此解释为“如果第一个请求是POST,请不要重新发送重定向请求的数据,但无论如何都要使第二个请求成为GET”。这可以解释为什么你在第二次尝试时丢失了任何一个POST主体。

请注意,出于this answer中解释的原因,过度依赖重写/重定向将http://请求转换为https://请求应被视为不良做法。

答案 1 :(得分:1)

尝试在php中捕获raw post data

$data = file_get_contents('php://input');
相关问题