Мне нужно получить доступ к 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();
}
}
Когда я отлаживаю код, он показал мне эту ошибку,
HttpResponseProxy {HTTP/1.1 400 Bad Request [Сервер: GitHub.com, Дата: Пт, 03 фев 2017 12:14:58 GMT, Content-Type: application/json; charset = utf-8, Content-Length: 89, Status: 400 Bad Request, X-RateLimit-Limit: 200, X-RateLimit-Осталось: 187, X-RateLimit- Reset: 1486125149, X-OAuth-Scopes: репо, пользователь, X-Accepted-OAuth-Scopes: repo, X-GitHub-Media-Type: github.v3; format = json, Access-Control-Expose-Headers: ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit- Reset, X-OAuth-Scopes, X- Accepted-OAuth-Scopes, X-Poll-Interval, Access-Control-Allow-Origin: *, Content-Security-Policy: default-src 'none', Strict-Transport-Security: max-age = 31536000; IncludeSubdomains; preload, X-Content-Type-Options: nosniff, X-Frame-Options: deny, X-XSS-Protection: 1; mode = block, X-GitHub-Request-Id: CF0A: 0EE1: B057F26: EBCB8DF: 58947441] ResponseEntityProxy {[Content-Type: application/json; charset = utf-8, Content-Length: 89, Chunked: false]}}
что я делаю неправильно? Не могли бы вы быть добрыми, чтобы помочь мне исправить это. Спасибо заранее