2016-06-24 1 views
0

현재 내 서버에 사용자를 등록하기 위해 사용자의 사용자 이름, 암호 및 전자 메일을 보내야하는 프로젝트를 진행 중입니다. 나는 그것을 위해 POST 명령을 사용했고 사용자를 등록하기 위해 3 개의 값을 전송해야하므로 그 용도로 ContentValues를 사용했습니다. 여기 HttpUrlConnection에 의해 서버에 사용자 데이터 등록 요청 게시

@Override 
    protected String doInBackground(String... params) { 
     try { 
      url = new URL(params[0]); 
      httpURLConnection = (HttpURLConnection) url.openConnection(); 
      httpURLConnection.setDoInput(true); 
      httpURLConnection.setDoOutput(true); 
      httpURLConnection.setRequestMethod("POST"); 

      ContentValues values = new ContentValues(); 
      values.put("email", "[email protected]"); 
      values.put("password", "123"); 
      values.put("name","ABC"); 

      outputStream = httpURLConnection.getOutputStream(); 

      bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream)); 
      bufferedWriter.write(getQuery(values)); 
      bufferedWriter.flush(); 

      statusCode = httpURLConnection.getResponseCode(); 

      Log.i("Result",String.valueOf(statusCode)); 

      inputStream = new BufferedInputStream(httpURLConnection.getInputStream()); 

      InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
      int data = inputStreamReader.read(); 
      while (data != -1) { 
       char current = (char) data; 
       result += current; 
       data = inputStreamReader.read(); 
      } 

      JSONObject jsonObject = new JSONObject(result); 

      Log.i("Result",String.valueOf(jsonObject)); 

      if (statusCode == 200) { 
       inputStream = new BufferedInputStream(httpURLConnection.getInputStream()); 

       Log.i("Result","Correct Data Returned"); 

       JSONObject jsonObject = new JSONObject(response); 

       return true; 

      } else { 
       Log.i("Result","Data not returned"); 
       return false; 
      } 

     } catch (Exception e) { 

      e.printStackTrace(); 
     } finally { 
      try { 
       if (inputStream != null) { 
        inputStream.close(); 
       } 
       if (outputStream != null) { 
        outputStream.close(); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 

내 getQuery 방법입니다 : 여기 내 코드입니다

private String getQuery(ContentValues values) throws UnsupportedEncodingException 
    { 
     StringBuilder result = new StringBuilder(); 
     boolean first = true; 

     for (Map.Entry<String, Object> entry : values.valueSet()) 
     { 
      if (first) 
       first = false; 
      else 
       result.append("&"); 

      result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); 
      result.append("="); 
      result.append(URLEncoder.encode(String.valueOf(entry.getValue()), "UTF-8")); 
     } 

     Log.i("Result",result.toString()); 

     return result.toString(); 
    } 

그러나 나는 그것에 의해 응답 다음 점점 오전 :

Result: name=ABC&email=abc%40xyz.com&password=123 
Result: 422 
System.err: java.io.FileNotFoundException: http://docpanel.myworkdetails.com/api/auth/register 

422 응답 코드에 의해 반환 된 상태 코드를 의미 :

"errors": { 
    "email": [ 
     "The email field is required." 
    ], 
    "password": [ 
     "The password field is required." 
    ], 
    "name": [ 
     "The password field is required." 
    ] 
    }, 
    "status_code": 422 

POST 메서드로 arguements를 전달하여 내 가입 페이지가 작동하도록하는 방법을 얻지 못하고 있습니다. 올바른 URL을 가지고 있습니다.

이 서버 측 오류입니까, 아니면 POST 구현시 실수입니까?

제발 도와주세요! 미리 감사드립니다.

답변

0

의 HttpPost를 사용할 수

내가하지 않았다 실수를했다 httpUrlConnection.connect()을 올바른 위치에 추가하십시오. httpURLConnectio 올바른 위치에 n.setRequestProperty ("Accept", "/")이 제대로 작동합니다. 그래서 여기에 HttpUrlConnection을 사용하는 POST 요청이 signUp 페이지를 만들기 위해 사용되는 올바른 코드가 있습니다 :

protected String doInBackground(String... params) { 
     try { 
      url = new URL(params[0]); 
      httpURLConnection = (HttpURLConnection) url.openConnection(); 
      httpURLConnection.setDoInput(true); 
      httpURLConnection.setDoOutput(true); 
      httpURLConnection.setRequestMethod("POST"); 
      httpURLConnection.setRequestProperty("Accept","*/*"); 

      ContentValues values = new ContentValues(); 
      values.put("email", "[email protected]"); 
      values.put("password", "hjh"); 
      values.put("name","hui"); 

      httpURLConnection.connect(); 

      outputStream = httpURLConnection.getOutputStream(); 

      bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream)); 
      bufferedWriter.write(getQuery(values)); 
      bufferedWriter.flush(); 

      statusCode = httpURLConnection.getResponseCode(); 

      inputStream = httpURLConnection.getInputStream(); 

      if (statusCode == 200) { 
       InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
       int data = inputStreamReader.read(); 
       while (data != -1) { 
        char current = (char) data; 
        result += current; 
        data = inputStreamReader.read(); 
       } 

       JSONObject jsonObject = new JSONObject(result); 

       Log.i("Result",String.valueOf(jsonObject)); 

      } else { 
       Log.i("Result","false"); 
       return false; 
      } 

     } catch (Exception e) { 

      e.printStackTrace(); 
     } finally { 
      try { 
       if (inputStream != null) { 
        inputStream.close(); 
       } 
       if (outputStream != null) { 
        outputStream.close(); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 
0

당신이 대신 해결 HttpURLConnection의

 final HttpParams httpParams = new BasicHttpParams(); 
     HttpConnectionParams.setConnectionTimeout(httpParams, Constants.CONNECTION_TIMEOUT); 
     HttpClient httpClient = new DefaultHttpClient(httpParams); 
     HttpPost httpPost = new HttpPost("yourBackendUrl"); 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
     nameValuePairs.add(new BasicNameValuePair("key","value")); 
     httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     HttpResponse response = httpClient.execute(httpPost); 
     InputStream inStream = response.getEntity().getContent(); 
     builder = new StringBuilder(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(inStream)); 
     String line; 
     while ((line = reader.readLine()) != null) { 
      builder.append(line); 
     } 
     JSONObject json = new JSONObject(builder.toString()); 
+0

HttpPost는 API23에서 일부 보안 결함으로 인해 내가 아는 한 제거되었으므로 사용하지 않습니다. – Swr7der