Duster
@Duster

Как сформировать POST запрос к VKontakte API?

Здравствуйте, уважаемые.

Подскажите, пожалуйста, как сделать нормальный multipart/form-data запрос ко ВКонтакте API?
Оговорюсь сразу, передавать нужно не файлы, а большие списки.
Пытался передавать обычный application/x-www-form-urlencoded - не воспринимает его.

Попытался так:
try {
			URL url = new URL("https://api.vk.com/method/groups.getById");

			HttpURLConnection connection = (HttpURLConnection) url.openConnection();
			connection.setDoOutput(true);
			connection.setRequestMethod("POST");

			MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.STRICT);
			multipartEntity.addPart("", new StringBody("group_ids=1,2,3,4"));
			// и так multipartEntity.addPart("group_ids", new StringBody("1,2,3,4"));

			connection.setRequestProperty("Content-Type", multipartEntity.getContentType().getValue());

			try (OutputStream out = connection.getOutputStream();
			     InputStream is = connection.getInputStream();
			     BufferedReader rd = new BufferedReader(new InputStreamReader(is))) {
				multipartEntity.writeTo(out);

				String line;
				StringBuffer response = new StringBuffer();
				while ((line = rd.readLine()) != null) {
					response.append(line);
				}

				return response.toString();

			}

		} catch (Exception e) {
			log.error("", e);
		}


Используется
<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.2.4</version>
        </dependency>


Не получается. Всегда ловлю ошибку 100:
{
		"error":
		{
			"error_code":100,
			"error_msg":"One of the parameters specified was missing or invalid: group_ids is undefined",
			"request_params":
			[
				{
					"key":"oauth",
					"value":"1"
				},
				{
					"key":"method",
					"value":"groups.getById"
				}
			]
		}
	}


Подскажите, как правильно?
  • Вопрос задан
  • 2170 просмотров
Решения вопроса 1
Duster
@Duster Автор вопроса
Не знаю, почему вчера не заработало, видимо, с логикой натупил.
Всё работает обычным запросом.

public static void main(String[] args) throws Exception {
		final String url = "https://api.vk.com/method/groups.getById";
		final String ids = "group_ids=1,2,3,4";

		URL obj = new URL(url);
		HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

		//add reuqest header
		con.setRequestMethod("POST");
		con.setRequestProperty("User-Agent", "VKontakte/1.0");
		con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");


		// Send post request
		con.setDoOutput(true);
		DataOutputStream wr = new DataOutputStream(con.getOutputStream());
		wr.writeBytes(ids);
		wr.flush();
		wr.close();

		int responseCode = con.getResponseCode();
		System.out.println("Sending 'POST' request to URL : " + url);
		System.out.println("Post parameters : " + ids);
		System.out.println("Response Code : " + responseCode);

		BufferedReader in = new BufferedReader(
				new InputStreamReader(con.getInputStream()));
		String inputLine;
		StringBuffer response = new StringBuffer();

		while ((inputLine = in.readLine()) != null) {
			response.append(inputLine);
		}
		in.close();

		//print result
		System.out.println(response.toString());
	}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos
Судя по всему, вам нужен джсон в группах. Т.е.
multipartEntity.addPart("group_ids", new StringBody("[1,2,3,4]"));

Ну и сниффером проверьте чего вы шлете...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы