我目前正在尝试按照Fliptop的说明使用 API 。api的描述指定它必须使用json输入,因此,我自己制作了json对象并将其转换为字符串。但是,当我尝试使用find_contact api 时,http 响应得到
{“参数”:500}
而不是正确的数据
{“帐户”:{“site_key”:“...”,“seat_id”:“...”,“org_id”:“”,“许可证”:{...}。
我尝试通过发送输入不正确的请求在文档网站上进行一些测试(单击任何高级 api,你会看到它) ,它给了我相同的响应正文{"param":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":"San Francisco"} ] }。
我不是网络专家,但这个请求对我来说似乎很好。尽管如此,我仍然对发生的事情感到困惑......