#java #http #graphql #apache-commons-httpclient
#java #http #graphql #apache-commons-httpclient
Вопрос:
Мне нужно сделать запрос к сервису WikiCsMoney и получить ответ в формате json. Я сделал следующий запрос
String uri = "https://wiki.cs.money/graphql?query=query skin($id: ID!) { skin(id: $id) { price_trader_log { name values { price_trader_new time } } }}amp;operationName=skinamp;variables={"id":"usp-s-torque"}"
Если я возьму и вручную через командную строку браузера или через Postman выполню этот запрос, то он вернет нужный мне ответ.
введите описание изображения здесь
Я делаю запрос соответствующим образом
public String sendRequestToWiki(String PROXY_HOST) throws IOException {
String uri = "https://wiki.cs.money/graphql?query=query skin($id: ID!) { skin(id: $id) { price_trader_log { name values { price_trader_new time } } }}amp;operationName=skinamp;variables={"id":"usp-s-torque"}";
//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 skin($id: ID!) { skin(id: $id) { price_trader_log { name values { price_trader_new time } } }}amp;operationName=skinamp;variables={"id":"usp-s-torque"}': 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)
Может кто-нибудь помочь мне решить эту проблему, потому что если вручную отправить запрос, то мы получим правильный ответ, а это значит, что Юрий прав, возможно, я использую неправильный подход к выполнению запроса. заранее спасибо!
Комментарии:
1. запрос в методе url = GET (обычно не поддерживается, но если протестировано / работает, все может быть в порядке)… но эти параметры (включенные в uri: запрос, переменные), вероятно, следует удалить из uri и определить / передать каким-либо другим способом (сбой требований / утверждений проверки uri клиента / библиотеки… но извините… IDK как, IDK java)
2. я думаю, что я решил проблему, проблему с кодировкой url, я это исправил, так что теперь uri выглядит как эта строка uri = » wiki.cs.money/… skinNameForWiki «»}»;