java - 通过 HTTP 向 graphQL api 站点 WikiCSMoney 发送请求并在 Java 中获取 JSON 响应
问题描述
我需要向服务 WikiCsMoney 发出请求并获得 json 格式的响应。我提出了以下要求
String uri = "https://wiki.cs.money/graphql?query=query%20skin($id:%20ID!)%20{%20%20skin(id:%20$id)%20{%20%20%20%20price_trader_log%20{%20%20%20%20%20%20name%20%20%20%20%20%20values%20{%20%20%20%20%20%20%20%20price_trader_new%20%20%20%20%20%20%20%20time%20%20%20%20%20%20}%20%20%20%20}%20%20}}&operationName=skin&variables=%7B%22id%22%3A%22usp-s-torque%22%7D"
如果我通过浏览器的命令行或者通过 Postman 手动执行这个请求,那么它会返回我需要的答案。 在此处输入图像描述
我正在以适当的方式提出请求
public String sendRequestToWiki(String PROXY_HOST) throws IOException {
String uri = "https://wiki.cs.money/graphql?query=query%20skin($id:%20ID!)%20{%20%20skin(id:%20$id)%20{%20%20%20%20price_trader_log%20{%20%20%20%20%20%20name%20%20%20%20%20%20values%20{%20%20%20%20%20%20%20%20price_trader_new%20%20%20%20%20%20%20%20time%20%20%20%20%20%20}%20%20%20%20}%20%20}}&operationName=skin&variables=%7B%22id%22%3A%22usp-s-torque%22%7D";
//String encodedURI = URLEncoder.encode(uri, StandardCharsets.UTF_8.toString());
System.out.println(uri);
String username = "username";
String password = "password";
HttpClient client = new HttpClient();
HttpMethod method = new PostMethod(uri);
HostConfiguration config = client.getHostConfiguration();
config.setProxy(PROXY_HOST, PROXY_PORT);
Credentials credentials = new UsernamePasswordCredentials(username, password);
AuthScope authScope = new AuthScope(PROXY_HOST, PROXY_PORT);
client.getState().setProxyCredentials(authScope, credentials);
client.executeMethod(method);
String responseBody = method.getResponseBodyAsString();
JSONObject skinInfo = new JSONObject(responseBody);
JSONObject itemInf = skinInfo.getJSONObject("skin");
JSONArray priceTraderLog = itemInf.getJSONArray("price_trader_log");
String nameItem = priceTraderLog.getJSONObject(0).getString("name");
return nameItem;
}
但我得到以下异常
Exception in thread "main" java.lang.IllegalArgumentException: Invalid uri 'https://wiki.cs.money/graphql?query=query%20skin($id:%20ID!)%20{%20%20skin(id:%20$id)%20{%20%20%20%20price_trader_log%20{%20%20%20%20%20%20name%20%20%20%20%20%20values%20{%20%20%20%20%20%20%20%20price_trader_new%20%20%20%20%20%20%20%20time%20%20%20%20%20%20}%20%20%20%20}%20%20}}&operationName=skin&variables=%7B%22id%22%3A%22usp-s-torque%22%7D': Invalid query
at org.apache.commons.httpclient.HttpMethodBase.<init>(HttpMethodBase.java:222)
at org.apache.commons.httpclient.methods.GetMethod.<init>(GetMethod.java:89)
at noSteam.SteamPage.sendRequestToWiki(SteamPage.java:526)
at noSteam.MainTester.main(MainTester.java:25)
有人可以帮我解决这个问题吗,因为如果您手动发送请求,那么我们会得到正确的答案,这意味着 Yuri 是正确的,也许我使用了错误的方法来执行请求。提前致谢!
解决方案
推荐阅读
- mysql - Mysql 表排序规则与 Windows 上的数据库排序规则不同
- visual-studio-2019 - 尝试在 Visual Studio 项目中安装 Nuget 包时出现长路径问题
- r - 使用 dplyr 时如何保留其他列?
- r - 如何使用预定义的集群/类执行层次聚类?
- python-3.6 - 看不到 `asyncio.Transport.write()` 的任何效果
- .net - 从 Azure Build Pipeline 中的 FxCop 代码分析器 (Roslyn) 生成报告
- flutter - 将文本包装在一行中,如果有可用空间,则用分隔符填充它
- c++ - 智能指针(shared_ptr)
- python-3.x - 传递变量 python 3 和 html
- html - 不能让 div 坐在其他 div 弹性框下面