여유 시간에 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
의 내용을 덤프하려고해도 내용이 비어 있습니다.
내가 뭘 잘못하고 있니? 미리 감사드립니다.
PC에서 지정된 URL을 방문하면 302 리디렉션이 수행됩니까? URL 끝에 슬래시를 지정해야 할 수도 있습니다. – Jon
놀라운! 그것이 문제였습니다. 그리고 URL 끝에 – Trogvar
@ 존 포스트를 답으로 추가하면 즉시 해결할 수 있습니다. Trogvar 대답을 수락하십시오 : – verbumSapienti