Post 通过 HttpUrlConnection 请求在服务器上注册用户数据
Post request for registering user data on server by HttpUrlConnection
我目前正在做一个项目,我需要发送用户的用户名、密码和电子邮件,以便在我的服务器上注册用户。我为此使用了 POST 命令,因为我必须发送 3 个值来注册用户,所以我为此使用了 ContentValues。这是我的代码:
@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", "abc@xyz.com");
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 是 responseCode 返回的状态代码,表示:
"errors": {
"email": [
"The email field is required."
],
"password": [
"The password field is required."
],
"name": [
"The password field is required."
]
},
"status_code": 422
我不知道如何通过 POST 方法传递参数以使我的注册页面正常工作。我有正确的 URL.
这是服务器端故障还是我在实施时出错 POST?
请帮忙!
提前致谢。
为什么不直接将 url 与参数连接起来?
请求将如下所示:
“http://example.com/test?param1=a¶m2=b¶m3=c”
您可以使用 HttpPost 而不是 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());
已解决
我犯了错误,我没有在正确的地方添加 httpUrlConnection.connect() 以及 httpURLConnection.setRequestProperty("Accept","/") 在正确的位置使它工作正常。所以这是使用 HttpUrlConnection 的 POST 请求使注册页面成为可能的正确代码:
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", "abc@tjk.com");
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;
}
我目前正在做一个项目,我需要发送用户的用户名、密码和电子邮件,以便在我的服务器上注册用户。我为此使用了 POST 命令,因为我必须发送 3 个值来注册用户,所以我为此使用了 ContentValues。这是我的代码:
@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", "abc@xyz.com");
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 是 responseCode 返回的状态代码,表示:
"errors": {
"email": [
"The email field is required."
],
"password": [
"The password field is required."
],
"name": [
"The password field is required."
]
},
"status_code": 422
我不知道如何通过 POST 方法传递参数以使我的注册页面正常工作。我有正确的 URL.
这是服务器端故障还是我在实施时出错 POST?
请帮忙! 提前致谢。
为什么不直接将 url 与参数连接起来?
请求将如下所示: “http://example.com/test?param1=a¶m2=b¶m3=c”
您可以使用 HttpPost 而不是 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());
已解决
我犯了错误,我没有在正确的地方添加 httpUrlConnection.connect() 以及 httpURLConnection.setRequestProperty("Accept","/") 在正确的位置使它工作正常。所以这是使用 HttpUrlConnection 的 POST 请求使注册页面成为可能的正确代码:
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", "abc@tjk.com");
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;
}