如何使用 HttpUrlConnect 使用 java 查询 Github graphql API

Posted

技术标签:

【中文标题】如何使用 HttpUrlConnect 使用 java 查询 Github graphql API【英文标题】:How to query Github graphql API with java using HttpUrlConnect 【发布时间】:2018-04-22 10:09:53 【问题描述】:

我不知道我的代码出了什么问题,当我尝试向 GitHub 发出请求时,我不断收到错误 401。我的应用之前使用 REST API 并将其转换为 Graphql,但我发现它很困难

private static String makeHttpRequest(URL url) throws IOException 
    String jsonResponse = "";

   // If the URL is null, then return early.
    if (url == null) 
        return jsonResponse;
    

    HttpURLConnection urlConnection = null;
    InputStream inputStream = null;
    try 
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setReadTimeout(10000 /* milliseconds */);
        urlConnection.setConnectTimeout(15000 /* milliseconds */);
        urlConnection.setRequestMethod("POST");
        urlConnection.setDoOutput(true);
        urlConnection.setDoInput(true);
        urlConnection.setRequestProperty("Authorization","Bearer token");
        urlConnection.setRequestProperty("Content-Type", "application/json");


        DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream());
        wr.writeBytes("\"query\":\"querysearch(type:USER query:\"location:lagos language:java\")userCount");
        wr.flush();
        wr.close();

        int rc = urlConnection.getResponseCode();
        inputStream = urlConnection.getInputStream();
        jsonResponse = readFromStream(inputStream);

     catch (IOException e) 
        Log.e(LOG_TAG, "Problem retrieving the earthquake JSON results.", e);
     finally 
        if (urlConnection != null) 
            urlConnection.disconnect();
        
        if (inputStream != null) 
            inputStream.close();
        
    
    return jsonResponse;

【问题讨论】:

【参考方案1】:

发现错误

我的令牌有问题,查询格式应该是错误的

"\"query\": \"query  search ( type : USER, query : \\\"location:lagos\\\" )  userCount \"" 

感谢您的建议

【讨论】:

【参考方案2】:

授权标头令牌可能无效。 HTTP 401 = 未授权。

【讨论】:

“不记名令牌”。令牌是占位符,对吧?您需要从服务提供商处获取。有点像密码。 是的,我有,但仍然面临同样的问题。我确实用我的访问令牌替换了令牌【参考方案3】:

我建议尝试使用 Curl 发出相同的请求,当您看到成功时 - 将相同的参数/标头应用于 HttpUrlConnection。

【讨论】:

以上是关于如何使用 HttpUrlConnect 使用 java 查询 Github graphql API的主要内容,如果未能解决你的问题,请参考以下文章

HttpUrlConnect post提交

Android’s HTTP Clients (httpClient 和 httpURLConnect 区别)

如何在 java 中使用代理获取 URL 连接?

android 连接网络的简单实例

如何在OSX上解压缩omni.ja?

如何防止 JA-SIG CAS spring 安全重定向循环?