我正在创建一个用于提问/回答问题的应用。 我提问时,我的POST请求有问题。
我试图在终端
中使用这样的东西curl -H "Content-Type: application/json" -d '{"firstName":"Chris", "lastName": "Chang", "email": "support@mlab.com"}' http://your-app-name.herokuapp.com/contacts
它运作良好。
但是当我尝试在AndroidStudio中发送POST请求时,我的参数(例如姓名,姓氏,电子邮件等)将不会发送。 我尝试使用https://laracasts.com/discuss/channels/tips/50-loading-form-macros。请求发送(我知道因为它显示了请求的日期)但没有任何参数。
我的代码应该更改哪些内容才能正常工作?
Map<String, String> data = new HashMap<String, String>();
data.put("firstName", "Gena");
data.put("lastName", "Bukin");
if (HttpRequest.post("https://safe-citadel-91138.herokuapp.com/questions").form(data).created())
System.out.println("User was created");
答案 0 :(得分:0)
基本上,您的curl
请求会在请求正文中以JSON格式发送用户数据。您的Java代码尝试将请求中的数据作为表单数据发送,这些数据是不同的,可能不被服务器接受。
您可能需要更改代码才能使用HttpRequest.send(...)
方法而不是form
:
JSONObject json = new JSONObject();
json.put("firstName", "Gena");
json.put("lastName", "Bukin");
json.put("email", "support@mlab.com");
HttpRequest
.post("https://safe-citadel-91138.herokuapp.com/questions")
.contentType("application/json")
.send(json.toString());
此外,在curl
调用中您使用的访问权限与Java代码段http://your-app-name.herokuapp.com/contacts
vs https://safe-citadel-91138.herokuapp.com/questions
中的访问权限不同,也许您正在与错误的端点进行通信?
您可能希望查看一些Java到JSON映射库,如gson,以便将Java对象转换为正确的JSON或使用Android的JSONObject
类。
更新:
JSONObject
用于JSON映射答案 1 :(得分:0)
试试这个希望它会起作用
setlocal enableDelayedExpansion
for /r "C:\copies" %%# in (*.bak) do (
(forfiles /p "%%~dp#" /m "%%~nx#" /d 0 )&&(
echo ok
color
)||(
echo not ok
exit !errorlevel!
)
)
答案 2 :(得分:0)
试试这样..
Map<String, Object> params = new LinkedHashMap<>();
params.put("firstName", "Gena");
params.put("lastName", "Bukin");
JSONObject jsonObject = POST("https://safe-citadel-91138.herokuapp.com/questions", params);
/**
* Method allows to HTTP POST request to the server to send data to a specified resource
* @param serverURL URL of the API to be requested
* @param params parameter that are to be send in the "body" of the request Ex: parameter=value&also=another
* returns response as a JSON object
*/
public JSONObject POST(String serverURL, Map<String, Object> params) {
JSONObject jsonObject = null;
try {
URL url = new URL(serverURL);
Log.e(TAG, params.toString());
StringBuilder postData = new StringBuilder();
for (Map.Entry<String, Object> param : params.entrySet()) {
if (postData.length() != 0) postData.append('&');
postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
postData.append('=');
postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
}
Log.e("POST", serverURL + ":" + params.toString());
byte[] postDataBytes = postData.toString().getBytes("UTF-8");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
connection.setRequestMethod("POST");
connection.setConnectTimeout(5000);
connection.setUseCaches(false);
connection.setDoOutput(true);
connection.getOutputStream().write(postDataBytes);
connection.connect();
int statusCode = connection.getResponseCode();
if (statusCode == 200) {
sb = new StringBuilder();
reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
}
jsonObject = new JSONObject(sb.toString());
} catch (Exception e) {
//e.printStackTrace();
}
return jsonObject;
}
答案 3 :(得分:0)
我刚刚尝试创建一个用户,但它确实有效。您可以刷新已共享的link以检查创建的用户。
这就是我试过的
String endPoint= "https://safe-citadel-91138.herokuapp.com/questions";
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(endPoint);
post.addHeader("Content-Type", "application/json");
JSONObject obj = new JSONObject();
obj.put("firstName", "TESTF");
obj.put("lastName", "TESTL");
obj.put("email", "support@mlab.com");
StringEntity entity = new StringEntity(obj.toString());
post.setEntity(entity);
HttpResponse response = httpClient.execute(post);
}catch (Exception e){
}
<强>更新强>
BTW我使用了来自this链接
的json jar