我需要访问GitHub graphql API
以获得关于某个存储库的一些数据。下面的curl
命令可以正常工作
curl -i -H "Authorization: bearer myGithubToken" -X POST -d '{"query": "query { repository(owner: \"wso2-extensions\", name: \"identity-inbound-auth-oauth\") { object(expression:\"83253ce50f189db30c54f13afa5d99021e2d7ece\") { ... on Commit { blame(path: \"components/org.wso2.carbon.identity.oauth.endpoint/src/main/java/org/wso2/carbon/identity/oauth/endpoint/authz/OAuth2AuthzEndpoint.java\") { ranges { startingLine endingLine age commit { message url history(first: 2) { edges { node { message url } } } author { name email } } } } } } } }"}' https://api.github.com/graphql
现在我需要在Java
中调用相同的代码,因为我需要操作输出。下面是我尝试过的代码,
public void callGraphqlApi(){
CloseableHttpClient httpClientForGraphql = null;
CloseableHttpResponse httpResponseFromGraphql= null;
httpClientForGraphql=HttpClients.createDefault();
HttpPost httpPost= new HttpPost("https://api.github.com/graphql");
String query= "query\":\"query { repository(owner: \"wso2-extensions\", name:\"identity-inbound-auth-oauth\") { object(expression: \"83253ce50f189db30c54f13afa5d99021e2d7ece\") { ... on Commit { blame(path: \"components/org.wso2.carbon.identity.oauth.endpoint/src/main/java/org/wso2/carbon/identity/oauth/endpoint/authz/OAuth2AuthzEndpoint.java\") { ranges { startingLine endingLine age commit { message url history(first: 2) { edges { node { message url } } } author { name email } } } } } } } }";
httpPost.addHeader("Authorization","Bearer myGithubToken");
try {
StringEntity params= new StringEntity(query);
httpPost.addHeader("content-type","application/x-www-form-urlencoded");
httpPost.setEntity(params);
httpResponseFromGraphql= httpClientForGraphql.execute(httpPost);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我做错了什么?你能帮我解决这个问题吗。提前致谢
通过如下更改上面的代码使程序工作。使用JSON
库创建复杂的JSON
是一个很好的做法,而不是手动创建,因为大多数情况下,手动创建复杂的JSON
可能会导致很多麻烦。
import org.json.JSONObject;
public void callingGraph(){
CloseableHttpClient client= null;
CloseableHttpResponse response= null;
client= HttpClients.createDefault();
HttpPost httpPost= new HttpPost("https://api.github.com/graphql");
httpPost.addHeader("Authorization","Bearer myToken");
httpPost.addHeader("Accept","application/json");
JSONObject jsonObj = new JSONObject();
jsonobj.put("query", "{repository(owner: \"wso2-extensions\", name: \"identity-inbound-auth-oauth\") { object(expression: \"83253ce50f189db30c54f13afa5d99021e2d7ece\") { ... on Commit { blame(path: \"components/org.wso2.carbon.identity.oauth.endpoint/src/main/java/org/wso2/carbon/identity/oauth/endpoint/authz/OAuth2AuthzEndpoint.java\") { ranges { startingLine, endingLine, age, commit { message url history(first: 2) { edges { node { message, url } } } author { name, email } } } } } } } }");
try {
StringEntity entity= new StringEntity(jsonObj.toString());
httpPost.setEntity(entity);
response= client.execute(httpPost);
}
catch(UnsupportedEncodingException e){
e.printStackTrace();
}
catch(ClientProtocolException e){
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}
try{
BufferedReader reader= new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line= null;
StringBuilder builder= new StringBuilder();
while((line=reader.readLine())!= null){
builder.append(line);
}
System.out.println(builder.toString());
}
catch(Exception e){
e.printStackTrace();
}
}
问题内容: 我需要访问以获得有关某个存储库的一些数据。以下命令很好用 现在,我需要调用相同的名称来操纵输出。这是我尝试过的代码, 当我调试代码时,它向我显示此错误, HttpResponseProxy {HTTP / 1.1 400错误的请求[服务器:GitHub.com,日期:2017年2月3日,星期五,格林尼治标准时间12:14:58,内容类型:application / json; char
问题内容: 如何以一种优雅的方式通过id获取任何HTTP会话或Web应用程序(Java 2 EE)中当前所有活动的HTTP会话? 当前,我有一个会话,一旦创建,便将其放入,一切正常,我可以随时通过会话ID从该映射中检索HTTP会话,但是看起来对象将永远不会完成……即使会话使该映射无效仍然引用无效的会话对象…我也已经阅读了这篇文章,在我看来,这是不可接受的… 换句话说,我需要一种可能性来查看任何Ht
问题内容: 我正在一个项目中,我必须使用REST并使用Java来访问一组Google日历。 该程序位于私人非Google服务器上,定期(通过cron作业)连接到Google帐户,获取链接到该帐户的日历列表,获取每个日历的上个月活动,并返回包含所有内容的XML文件信息。该程序应该能够在没有任何用户输入的情况下执行和访问日历。目前,该项目指定将仅读取日历,而不修改日历(因此将仅进行GET / LIST
我有一个基本的SpringMVC应用程序,运行(和映射)很好。现在我想用MockMvc设置我的单元测试来执行get请求和其他东西。但如果我运行测试,则会出现断言错误状态: 以下是我的短期测试课程: 所以我希望MockMvc在默认情况下获得DispatcherServlet的位置。但它实际上并不是用来映射的。 我的“web.xml”和“dispatcher servlet.xml”位于“web-IN
问题内容: 我已经开发了一个 JAVA SWING应用程序 。我想在安装此应用程序 几台电脑 ,所有 访问互联网 。那么我应该在哪里放置MYSQL数据库?所有这些计算机都应该能够 通过Internet访问相同的数据库。 问题答案: 出于安全性(身份验证授权,加密)和性能的原因,允许直接通过Internet访问数据库不是很常见。在大多数情况下,您将创建一个基于Web的服务器应用程序,该应用程序可以执
我有客户端发送给我的以下endpoint: 由于这个请求需要通过AWS授权过程来调用,所以我想使用API网关SDK,但是我找不到如何调用它的简单示例。我能够使用Postman成功地测试API调用(如AWS文档中所述),但我不知道如何使用SDK指定它。endpoint应该是完整的URL?我该如何在此代码之外进行呼叫?我尝试使用GetResourceRequest,但这似乎不对。如果是,我拥有的这个U