gpt4 book ai didi

java - HttpPost 请求未发送正确的 JSON 数据

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

我目前正在按照 fliptop 的说明尝试使用 API .api的描述中指定它必须使用json输入,因此,我制作了json对象并自己将其转换为字符串。但是,当我尝试使用 find_contact api 时,http 响应为

{"param":500}

而不是像

这样的正确数据

<强>{ “帐户”: { "site_key": "...", "seat_id": "...", "org_id": "", “执照”: {....

我尝试通过发送带有不正确输入的请求在文档网站上做一些测试(点击任何高级 api,你会看到它),它给了我相同的响应正文{ “参数”:500}。因此,我认为我的请求实体可能有问题。

这是我的代码。谁能告诉我这是怎么回事?

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

public class Test {

// Generate json string
// {"contacts": [ { "email": "doug@fliptop.com", "title":"CEO", "company":"Fliptop", "address":"San Francisco"} ] }
public static String jsonString() {
JSONObject obj1 = new JSONObject();
obj1.put("email", "doug@fliptop.com");
obj1.put("title", "CEO");
obj1.put("company", "Fliptop");
obj1.put("address", "San Francisco");
JSONArray list1 = new JSONArray();
list1.add(obj1);
JSONObject obj2 = new JSONObject();
obj2.put("contacts", list1);
System.out.println(obj2.toJSONString());
return obj2.toJSONString();
}

public static void find_contact() {
HttpClient httpClient = new DefaultHttpClient();
try {
//you will need api key here!!
HttpPost request = new HttpPost("http://api.fliptop.com/s2/v1/find_contact?api_key=xxxxxxxxxxxxxxxxxxxxxx");
StringEntity params = new StringEntity(jsonString(),"UTF-8");
params.setContentType("application/json; charset=UTF-8");
request.setEntity(params);
HttpResponse response = httpClient.execute(request);
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String result = "";
String line;
while ((line = rd.readLine()) != null) {
result += line;
}
System.out.println(result);
rd.close();
System.out.println("status:" + response.getStatusLine());
}catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String args[]) {
find_contact();
}
}

更新:

我听从了 Dave 的建议,通过 WireShark 检查请求。请求显示为POST请求,数据为text/plain,内容如下

json={"contacts": [ { "email": "doug@fliptop.com", "title":"CEO", "company":"Fliptop", "address":"旧金山"} ] } .

我不是网络专家,但这个请求对我来说似乎没问题。不过,我对发生的事情感到困惑...

最佳答案

经过几个小时的努力,我通过检查来自 chrome 的发布请求的详细信息发现了我​​的问题的原因。您可以看到 Content-Type 实际上是 "application/x-www-form-urlencoded",这就是我一直失败的原因。通过更改我的 Content-Type,一切正常。

enter image description here

这是我的代码,您可以使用 URL 或 appache httpclient,它们都可以正常工作。

    URL url = new URL("http://api.fliptop.com/s2/v1/find_contact?api_key=xxxxxxxxxxxxxxxxxxxxxx");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");

OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
writer.write(data); // data = "json={\"contact\": { \"email\": \"robbie@fliptop.com\"}}"
writer.close();

if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader reader =
new BufferedReader(new InputStreamReader(connection.getInputStream(), UTF_8));

String line;
while ((line = reader.readLine()) != null) {
result += line;
}
}

关于java - HttpPost 请求未发送正确的 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18081669/

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