2013-07-08 4 views
1

여유 시간에 Android 학습을 진행하면서 HttpPost 요청의 이상한 동작이 발생했습니다. 내가 달성하기 위해 노력하고있어Android에서 HttpPost 요청 보내기, PHP에서 게시

: 내 개발 PC에서 실행중인 아파치 웹 서버에 안드로이드 응용 프로그램에서 간단한 POST 요청을 확인하고 PHP 스크립트의 게시 된 데이터를 표시는 어떤 형태가 전송됩니다합니다.

내 안드로이드 응용 프로그램의 자바 코드는 다음과 같은 AsyncTask 같은 Activity 내부에있는 :

<?php 
echo "Hello<br />"; 
var_dump($_SERVER); 
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    echo "Page was posted:<br />"; 
    foreach($_POST as $key=>$var) { 
     echo "[$key] => $var<br />"; 
    } 
} 
?> 

그리고 마지막 문제 :

private class DoSampleHttpPostRequest extends AsyncTask<Void, Void, CharSequence> { 

    @Override 
    protected CharSequence doInBackground(Void... params) { 
     BufferedReader in = null; 
     String baseUrl = "http://10.0.2.2:8080/android"; 

     try { 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpPost request = new HttpPost(baseUrl); 

      List<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
      postParameters.add(new BasicNameValuePair("login", "someuser")); 
      postParameters.add(new BasicNameValuePair("data", "somedata")); 
      UrlEncodedFormEntity form = new UrlEncodedFormEntity(postParameters); 
      request.setEntity(form); 

      Log.v("log", "making POST request to: " + baseUrl); 

      HttpResponse response = httpClient.execute(request); 

      in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
      StringBuffer sb = new StringBuffer(""); 
      String line = ""; 
      String NL = System.getProperty("line.separator"); 
      while ((line = in.readLine()) != null) { 
       sb.append(line + NL); 
      } 
      in.close(); 

      return sb.toString(); 
     } catch (Exception e) { 
      return "Exception happened: " + e.getMessage(); 
     } finally { 
      if (in != null) { 
       try { 
        in.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 

    @Override 
    protected void onPostExecute(CharSequence result) { 
     // this refers to a TextView defined as a private field in the parent Activity 
     textView.setText(result); 
    } 

} 

PHP 코드 다음이다 : 보시다시피, $_SERVER 내용이 덤프됩니다. 출력에서 $_SERVER["REQUEST_METHOD"]은 실제로 POST 요청을 작성 했음에도 불구하고 GET 값을 갖습니다. $_POST의 내용을 덤프하려고해도 내용이 비어 있습니다.

내가 뭘 잘못하고 있니? 미리 감사드립니다.

+1

PC에서 지정된 URL을 방문하면 302 리디렉션이 수행됩니까? URL 끝에 슬래시를 지정해야 할 수도 있습니다. – Jon

+0

놀라운! 그것이 문제였습니다. 그리고 URL 끝에 – Trogvar

+1

@ 존 포스트를 답으로 추가하면 즉시 해결할 수 있습니다. Trogvar 대답을 수락하십시오 : – verbumSapienti

답변

2

URL 끝에는 슬래시를 지정해야 할 수도 있습니다.

종종 아파치는 후행 슬래시로 끝나지 않는 요청을 리디렉션하여 후행 슬래시가 포함되도록합니다. 그 리다이렉트는 GET 리다이렉트 (약간의 조정없이)이므로, 모든 POST 데이터는 손실된다.