gpt4 book ai didi

java - Parse.com REST API 错误代码 400 : Bad Request from Java HTTP Request to Cloud Function

转载 作者:行者123 更新时间:2023-11-30 03:47:21 25 4
gpt4 key购买 nike

我有一个字符串正在尝试发送到 Parse.com 云函数。根据REST API文档( https://www.parse.com/docs/rest#general-requests ),它必须是json格式,所以我将其做成json对象并将其转换为字符串附加到http请求url的末尾。

    JSONObject jsonParam = new JSONObject();
jsonParam.put("emailId", emailId);
String urlParameters = jsonParam.toString();

然后我按如下方式发送请求,尝试将其 cURL 代码示例匹配为 Java 代码:

        con.setDoOutput(true);
DataOutputStream wr = null;
wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();

尽管如此,我还是收到了返回的错误代码 400 以及错误消息“Bad Request”,我认为这是由于发送到云函数的参数无法识别造成的。我的代码中没有触发任何其他错误。然而,我通过控制台日志验证了 emailId 是一个普通字符串,并且生成的 JSON 对象以及它的 .toString() 等效项作为正确的字符串读取JSON 对象。这也适用于我在 Parse 数据库中创建对象的另一个函数。那么为什么它在这里不起作用呢?

以下是供引用和上下文的完整函数:

private void sendEmailWithParse(String emailId) throws IOException {
String url = "https://api.parse.com/1/functions/sendEmailNow";
URL obj = new URL(url);
HttpsURLConnection con = null;
try {
con = (HttpsURLConnection) obj.openConnection();
} catch (IOException e) {
System.out.println("Failed to connect to http link");
e.printStackTrace();
}

//add request header
try {
con.setRequestMethod("POST");
} catch (ProtocolException e) {
System.out.println("Failed to set to POST");
e.printStackTrace();
}
con.setRequestProperty("X-Parse-Application-Id", "**************************************");
con.setRequestProperty("X-Parse-REST-API-Key", "************************************************");
con.setRequestProperty("Content-Type", "application/json");

JSONObject jsonParam = new JSONObject();
jsonParam.put("emailId", emailId);
System.out.println("parameter being sent to cloud function: " + jsonParam);
System.out.println("parameter being sent to cloud function as string: " + jsonParam.toString());
String urlParameters = jsonParam.toString();

// Send post request
con.setDoOutput(true);
DataOutputStream wr = null;
try {
wr = new DataOutputStream(con.getOutputStream());
} catch (IOException e1) {
System.out.println("Failed to get output stream");
e1.printStackTrace();
}
try {
wr.writeBytes(urlParameters);
} catch (IOException e) {
System.out.println("Failed to connect to send over Parse object as parameter");
e.printStackTrace();
}
try {
wr.flush();
} catch (IOException e) {
e.printStackTrace();
}
try {
wr.close();
} catch (IOException e) {
System.out.println("Failed to connect to close datastream connection");
e.printStackTrace();
}

int responseCode = 0;
try {
responseCode = con.getResponseCode();
} catch (IOException e) {
System.out.println("Failed to connect to get response code");
e.printStackTrace();
}
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Post parameters : " + urlParameters);
System.out.println("Response Code : " + responseCode);
System.out.println("Response message: " + con.getResponseMessage());
}

最佳答案

我通过使用HttpRequest external library解决了这个问题。它使我能够更好地控制请求并更轻松地调试问题。服务器正常接收请求,问题出在 JSON 编码上。我没有将 JSON 对象作为请求中的参数,而是将其插入到 http 请求的正文中并使用 UTF-8 对其进行编码。

最后,这是有效的代码:

    String url = "https://api.parse.com/1/functions/sendEmailNow";
URL obj = new URL(url);

//Attempt to use HttpRequest to send post request to parse cloud
HttpRequest request = HttpRequest.post(obj).contentType("application/json");
request.header("X-Parse-Application-Id", "**************************");
request.header("X-Parse-REST-API-Key", "********************");
JSONObject jsonParam = new JSONObject();
jsonParam.put("emailId", emailId);
request.send(jsonParam.toString().getBytes("UTF8"));

if (request.ok())
System.out.println("HttpRequest WORKED");
else
System.out.println("HttpRequest FAILED " + request.code() + request.body());

关于java - Parse.com REST API 错误代码 400 : Bad Request from Java HTTP Request to Cloud Function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25317064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com