#java #curl #http #vkontakte_api #вконтакте
Пытаюсь прикрепить фото к посту, но upload-сервер возвращает {"server":619324,"photo":"[]","hash":"235eb464133565b70d01ee4b174b2697"} Шаги Получаю uload_url через photos.getWallUploadServer(group_id) Делаю POST-запрос на uload_url, где параметр формы photo содержит jpg-файл. Дамп POST-запроса Это дамп запроса, которые я получаю с Java-версии POST /upload.php?act=do_add&mid=231464696&aid=-14&gid=74806856&hash=2b2c4e818d938b4202e736bccb6de22e&rhash=d22a5b85bf5bd8298f193b4318c8d54d&swfupload=1&api=1&wallphoto=1 HTTP/1.1 Content-Length: 233477 Content-Type: multipart/form-data; boundary=0g6_BF339gILdnLw48ZE7ZTnTHz-pcIMiQG7Y Host: cs619324.vk.com Connection: Keep-Alive Cookie: remixlang=0 Cookie2: $Version=1 --0g6_BF339gILdnLw48ZE7ZTnTHz-pcIMiQG7Y Content-Disposition: form-data; name="photo"; filename="photo.jpg" Content-Type: image/jpeg (Бинарное содержимое файла) ... Как я делаю запрос через curl $ curl -F photo=@photo.jpg $uload_url Как я делаю запрос на Java Используется Apache HTTP-client 4. Результат аналогичен curl. HttpPost post = new HttpPost(server.toURI()); HttpEntity entity = MultipartEntityBuilder.create() .setLaxMode() .addBinaryBody(fileName, image, ContentType.create("image/jpeg"), fileName + ".jpeg") .build(); post.setEntity(entity); getNewHttpClient().execute(post); HttpClient getNewHttpClient() { KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); trustStore.load(null, null); SSLSocketFactory sf = new EmptySSLSocketFactory(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); HttpConnectionParams.setConnectionTimeout(params, 3 * 60 * 1000); SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); registry.register(new Scheme("https", sf, 443)); ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry); return new DefaultHttpClient(ccm, params); } Аналогичные действия для заливки фото в альбом (photos.getUploadServer) работают корректно. Находил похожие сообщения об ошибках, но не помогло.
Ответы
Ответ 1
Используй Fiddler и проксируй все запросы через него - это поможет быстрее понять в чём ошибка. Для начала попробуй в браузере на старнице метода выполнить загрузку файла и в Fiddler посмотреть как формируется запрос, затем проверь как работает твой код. Ошибка будет видна практически сразу. В моём случае PHP не отправляло содержимое файла.
Комментариев нет:
Отправить комментарий