如何从java访问github graphql API而不在java内部运行curl命令

2023-12-03

请原谅我问这么长的问题,因为我是初学者graphql。我需要访问github graphql API获取某个文件的责备详细信息,因为到目前为止还没有责备REST API可用于github API 版本 3。我可以获得以下输出graphql运行的查询here

  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
              }
            }
          }
        }
      }
    }
  }
}

从运行以下命令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

并运行相同的curlJava中的命令如下

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

public class Demo {
    public static void main(String[] args) {

        String url="https://api.github.com/graphql";
           String[] command = {"curl", "-H" ,"Authorization: Bearer myGitHubToken","-H","Accept:application/json","-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 } } } } } } } }\"}" , url};
            ProcessBuilder process = new ProcessBuilder(command); 
            Process p;
            try
            {
                p = process.start();
                 BufferedReader reader =  new BufferedReader(new InputStreamReader(p.getInputStream()));
                    StringBuilder builder = new StringBuilder();
                    String line = null;
                    while ( (line = reader.readLine()) != null) {
                            builder.append(line);
                            builder.append(System.getProperty("line.separator"));
                    }
                    String result = builder.toString();
                    System.out.print(result);

            }
            catch (IOException e)
            {   System.out.print("error");
                e.printStackTrace();
            }
    }

}

有没有其他方法可以得到相同的输出java不运行curl命令,就像运行一样curl里面的命令java这不是一个好的做法(根据我的观点)。提前致谢

使用 httpClient 代码更新

这是我尝试过的代码apache httpClient

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");


        String temp="{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 } } } } } } } }";

//        String temp="{repository(owner:\"wso2\",name:\"product-is\"){description}}";

        try {

           StringEntity entity= new StringEntity("{\"query\":\"query "+temp+"\"}");

            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();
        }


    }

但即使有这样的小问题,它也给了我{repository(owner:\"wso2\",name:\"product-is\"){description}}

{“message”:“解析 JSON 时出现问题”,“documentation_url”:“https://developer.github.com/v3"}

但是当这样的简单查询被传递时String temp="{viewer {email login }}";有用。我的代码有什么问题。请帮忙


问题几乎是你添加了一个额外的“查询”词,它应该是 像这样的东西:

(...)
StringEntity entity= new StringEntity("{\"query\":\""+temp+"\"}");

尽管我应该提醒您,您应该尽可能避免尝试对 json 进行硬编码,因此,理想的情况是您应该使用 JSON 库,从而产生如下所示的结果(完整代码):

import org.json.JSONObject; // New import

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();
        }


    }

记下转义双引号如何只是那些,以便 java 可以将其理解为单个字符串。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从java访问github graphql API而不在java内部运行curl命令 的相关文章

  • JavaMail Gmail 问题。 “准备启动 TLS”然后失败

    mailServerProperties System getProperties mailServerProperties put mail smtp port 587 mailServerProperties put mail smtp
  • 如何使用 FileChannel 将一个文件的内容附加到另一个文件的末尾?

    File a txt好像 ABC File d txt好像 DEF 我正在尝试将 DEF 附加到 ABC 所以a txt好像 ABC DEF 我尝试过的方法总是完全覆盖第一个条目 所以我总是最终得到 DEF 这是我尝试过的两种方法 File
  • Java程序中的数组奇怪的行为[重复]

    这个问题在这里已经有答案了 我遇到了这个 Java 程序及其以意想不到的方式运行 以下程序计算 int 数组中元素对之间的差异 import java util public class SetTest public static void
  • 在Windows上安装Java 11 OpenJDK(系统路径问题)

    Java 11 最近发布了 众所周知 这个版本没有安装文件 当然 要在没有安装程序的情况下安装 Java 我将系统设置 PATH 和 JAVA HOME 设置为解压缩 Java 11 的文件夹的地址 根据对类似问题的已接受回复建议 唯一的事
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • 无法通过 Git Bash 克隆 git 存储库

    在尝试使用克隆存储库时git clone 它显示以下错误 致命 无法访问 https github com microsoft c9 python getting started git https github com microsoft
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • Java8无符号算术

    据广泛报道 Java 8 具有对无符号整数的库支持 然而 似乎没有文章解释如何使用它以及有多少可能 有些函数 例如 Integer CompareUnsigned 很容易找到 并且似乎可以实现人们所期望的功能 但是 我什至无法编写一个简单的
  • 在数据流模板中调用 waitUntilFinish() 后可以运行代码吗?

    我有一个批处理 Apache Beam 作业 它从 GCS 获取文件作为输入 我的目标是根据执行后管道的状态将文件移动到两个 GCS 存储桶之一 如果管道执行成功 则将文件移动到存储桶 A 否则 如果管道在执行过程中出现任何未处理的异常 则
  • 如何为 Gson 编写自定义 JSON 反序列化器?

    我有一个 Java 类 用户 public class User int id String name Timestamp updateDate 我收到一个包含来自 Web 服务的用户对象的 JSON 列表 id 1 name Jonas
  • 当分配给变量时,我可以以某种方式重用 Gremlin GraphTraversals 代码吗?

    我有看起来像这样的 GraphTraversals attrGroup GraphTraversal
  • hibernate总是自己删除表中的所有数据

    您好 我正在开发一个 spring mvc 应用程序 它使用 hibernate 连接到存储文件的 mysql 数据库 我有两个方法 一个方法添加我选择的特定文件路径中的所有文件 另一种方法调用查询以返回从 mysql 存储的文件列表 问题
  • OnClick 事件中的 finish() 如何工作?

    我有一个Activity一键退出Activity 通过layout xml我必须设置OnClick事件至cmd exit调用 this finish 效果很好 public void cmd exit View editLayout thi
  • 如何在 JFreeChart TimeSeries 图表上显示降雨指数和温度?

    目前 我的 TimeSeries 图表每 2 秒显示一个位置的温度 现在 如果我想每2秒显示一次降雨指数和温度 我该如何实现呢 这是我的代码 import testWeatherService TestWeatherTimeLapseSer
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • Github - 上传文件

    我正在尝试将文件夹添加到 github 存储库 该文件在 github 上显示为空 并有一个绿色箭头 有谁知道如何解决这个问题 我将不胜感激你的帮助 谢谢 这看起来类似于 Git 如何跟踪未跟踪的内容 https stackoverflow
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • java迭代器内部是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个员工列表 List

随机推荐

  • Boost Spirit x3 示例计算器(calc8、calc9)链接器错误

    我对提升精神 以及提升 非常陌生 它非常有趣的图书馆 我使用 qtcreator MinGW 5 3 我只是添加每个源文件git hub calc8进入新项目并添加一些 boost 库 但我在尝试构建时遇到以下错误 所有其他示例都工作正常
  • 如何去除Makefile中的重复项?

    有没有办法简化 Makefile 中的这种重复 duo node modules bin duo build lib background build lib page build lib popup build lib backgroun
  • 如何将文件复制到另一个路径?

    我需要将文件复制到另一个路径 将原始文件保留在原来的位置 我还希望能够重命名该文件 FileInfo 的 CopyTo 方法有效吗 看一下文件 复制 使用 File Copy 您可以将新文件名指定为目标字符串的一部分 所以像 File Co
  • 开发 gem 时如何使用“调试器”和“撬动”? (红宝石)

    我正在开发一个 gem 我的 Gemfile 如下所示 source rubygems gemspec group development test do gem pry gem debugger gem rake end 但是 我不希望人
  • 词典应用程序[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想开发一个需要英语单词词典的iPhone应用程序 你们能给我建议任何链接吗 我可以从那里获得包含合理数量的英语单词及其含义和例句的数据库 提前致谢
  • 使用 scipy.integrate.quad 执行 3D 积分

    提出问题的动机 我正在尝试在所有空间上积分函数 f x y z 我尝试使用 scipy integrate tplquad 和 scipy integrate nquad 进行积分 但这两种方法都将积分返回为 0 当积分应该是有限的时 这是
  • JSF 1.2 中 POST 参数使用错误编码

    我在 Web 应用程序 JSF 1 2 Spring 和 Tomcat 7 中遇到了字符集编码问题 并且我已经不知道要测试什么来查看哪里出了问题 每当我提交类似 的内容时 我都会得到 这意味着我的数据发布为UTF 8正在 JSF 生命周期的
  • 通过 Python 对 MySQL 数据库中的密码进行 SHA512 哈希处理

    这个问题是基于关于答案 我想知道如何通过 SHA1 哈希密码 然后通过 Python 删除 MySQL 数据库中的明文密码 如何通过 Python 对 MySQL 数据库中的密码进行哈希处理 正如文档所说 你应该使用hashlib自 pyt
  • ANDROID -- 如何在图像上显示文本?

    好吧 所以这是场景 从头开始 我想显示三颗星 我有一个我想使用的图像 居中 我想在每个星星中发布不同的单词 当然 我不希望它被硬编码 但是一旦我能得到正确的布局 剩下的就会很容易 有人可以帮忙吗 我将不胜感激 如果您只想将文本覆盖在图像之上
  • 当用作类型或异常规范时,“参见下文”是什么意思?

    Looking through the C standard current draft http isocpp org files papers N3690 pdf sec 20 8 3 is one such place and thr
  • 如何在 Windows Phone 7 中的应用程序上获取 YouTube 视频的缩略图

    我的应用程序为用户返回了 YouTube 上的一些链接视频 但我不知道如何获取视频的缩略图 当用户单击缩略图时 它将调用 WebBrowserTask 来显示此链接 你能帮我解决它吗 谢谢 您可以使用GDATA去获取有关 YouTube 视
  • C# 中可通过背压进行观察

    C rx 有没有办法处理背压 我正在尝试从分页查询的结果调用 Web api 这个 Web api 非常脆弱 我不需要超过 3 个并发调用 所以 程序应该是这样的 从数据库获取一个页面 调用 Web api 页面上每条记录最多 3 个并发调
  • 针对 C 中的多种类型进行编译时检查?

    目前我有一个宏来检查值是否是类型 define CHECK TYPE INLINE val type void type 0 0 val type 0 在某些情况下 这对于能够对宏参数进行类型检查非常有用 但是如果我要检查多种类型怎么办 例
  • CORBA 中是否有与 writeReplace 等效的东西?

    当使用标准 Java 序列化时 可以根据以下方式在流中动态替换对象 Serializable界面 创建一个Object writeReplace 序列化期间将调用的方法 我的问题很简单 Corba Java 实现中是否有与此构造等效的结构
  • `vue-cli-service build` 不会生成模板的代码

    我试图理解为什么我在 Vue 项目的屏幕上看不到任何内容 我查看了 Vue CLI 生成的项目 并在中看到了这段代码main js new Vue render h gt h App mount appmodified 但我正在使用以下代码
  • 可以让通道保持开放状态吗?

    如果我从不检查 Go 通道的状态 是否可以永远保持 Go 通道打开 从不关闭通道 会导致内存泄漏吗 下面的代码可以吗 func requestCh chan lt Request GetResponse data RequestData R
  • R:+=(加等于)和 ++(加加)等价于 c++/c#/java 等?

    R有没有概念 加等于 或 加加 像 c c 其他一样吗 不 不是 请参阅 R 语言定义 运算符
  • 无法使用有角度的材料以有角度的方式加载 POPUP

    我创建了一个示例 stackblitz 演示 在弹出组件中实现了一个简单的角度材料表 我还选择了一个空表 将选定的表行从第一个表推送到第二个空表 但问题是我无法运行 stackblitz 示例 我尝试了各种方法来解决该问题 但无法找到解决方
  • 书面记录:每当关联模型发生变化时,都会在父级上创建一个版本?

    我正在开发一个 Rails 应用程序 我需要在其中显示审核跟踪Record 其中 has manyData 我的记录上有 paper trail 和关联的基准模型 并且它可以很好地保存它们的版本 然而 我需要的是one每当创建记录的版本一个
  • 如何从java访问github graphql API而不在java内部运行curl命令

    请原谅我问这么长的问题 因为我是初学者graphql 我需要访问github graphql API获取某个文件的责备详细信息 因为到目前为止还没有责备REST API可用于github API 版本 3 我可以获得以下输出graphql运