Формировать Домином Get/put Запросы

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#1
Есть задача, чтобы агент по какому-то событию формировал GET/PUT запросы такая себе синхронизация со сторонней внешней системой.
Я чаще всего делал через прослойку - ява библиотеку, где нужную мне функцию вызывал скриптом и орудовал потом с полученной стрингой.
Но делал так только GET запросы

а нет у кого такой библиотеке с PUT запросами?
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#4
спасибо, помогло
а с кодировкой не поможете?
если ответ JSON
то имею такое от GET
{"personid":"27","plastname":"РšРѕРІР°Р»РµРЅРєРѕ","pfirstname":"Р�нтон","psurname":" ","isuser":"1","pilogin":"toxarat@gmail.com","pipassword":"UvV4THj8","caid":"22","caidname":"Р�йшон","rspostid":"187","rspostidname":"РžРєРєСƒР»СŒС‚РёС�С‚","ppsex":"0","personemail":"toxarat@gmail.com","pstatus":"0"}
пофиг что делаю
conn.setRequestProperty("Content-Type", "UTF-8");
conn.setRequestProperty("Content-Type", "application/json");
и прочее

строка не меняется, видно что русский идёт в двухбайтовой кодировки, как-то можно всю эту строку сразу преобразовать нормально?
странно что любой браузер показывает подобные GET запросы корректно
 

erdi

Well-known member
20.08.2008
265
17
#6
судя по картинке кодировок, которую я выкладывал ранее на форуме, у тебя идет преобразование UTF8 в Win1251
данный GET запрос откуда получаешь? из Java? По-умолчанию java выставляет именно Win1251 кодировку как для всего агента/либы, так и по отдельности для каждого java файла. Иногда и это влияет на получаемую кодировку
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#7
судя по картинке кодировок, которую я выкладывал ранее на форуме, у тебя идет преобразование UTF8 в Win1251
данный GET запрос откуда получаешь? из Java? По-умолчанию java выставляет именно Win1251 кодировку как для всего агента/либы, так и по отдельности для каждого java файла. Иногда и это влияет на получаемую кодировку
да походу так и есть
плюнул на всё написал свой конвертер
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#8
чё-то я совсем запутался, конвертер не помогает, часть букв идёт не так
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#9
вроде бы разобрался, ява действительно возвращает в кодировке 1251
преобразование на клиенте происходит нормально, а вот на сервере нет
пока не выставил везде дефаултовый язык как русский сервер нормально преобразовывать не мог
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 567
263
#10
вроде бы разобрался, ява действительно возвращает в кодировке 1251
как пр-ло берет за основу настройки ОС
кот. в русской виндятке - 1251
можно принудительно преобразовывать <!--shcode--><pre><code class='java'>final String name =
new String(request.getParameter("name").getBytes("iso-8859-1"), "UTF-8");[/CODE]но необходимо понимать причину искажений, иначе результат будет непредсказуем...
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#11
как пр-ло берет за основу настройки ОС
кот. в русской виндятке - 1251
можно принудительно преобразовывать <!--shcode--><pre><code class='java'>final String name =
new String(request.getParameter("name").getBytes("iso-8859-1"), "UTF-8");[/CODE]но необходимо понимать причину искажений, иначе результат будет непредсказуем...
на клиенте это работает, на сервере нет
уже начинаю думать что на 64 битке это такая же проблема как с ODBC
 

Ruslan280

Well-known member
18.04.2013
50
0
#12
мой рабочий пост файла с параметрами апачевской либой . см по кодировке-может подойдет

Код:
 public static boolean SendPost(String url, String filepath, String docname,
String docnumber, String docdate, String er[]) {
boolean result = false;

XPathFactory xpathFactory = XPathFactory. newInstance();
XPath xpath = xpathFactory.newXPath();

try {

CloseableHttpClient httpclient = HttpClients.createDefault();

try {
HttpPost httppost = new HttpPost(url);

// httppost .setHeader("Content-Type",
// "multipart /form-data; charset=UTF-8");
FileBody bin = new FileBody(new File(filepath));
StringBody saction = new StringBody("document-add" ,
ContentType. TEXT_PLAIN);
StringBody sdocname = new StringBody(docname,
ContentType. TEXT_PLAIN.withCharset(Charset
. forName("UTF-8")));
StringBody sdocnumber = new StringBody(docnumber,
ContentType. TEXT_PLAIN.withCharset(Charset
. forName("UTF-8")));
StringBody sdocdate = new StringBody(docdate,
ContentType. TEXT_PLAIN);

HttpEntity reqEntity = MultipartEntityBuilder.create().addPart(
"file", bin).addPart("action" , saction).addPart("name" ,
sdocname).addPart( "number", sdocnumber).addPart("date" ,
sdocdate)
// .setCharset(Charset.forName("UTF-8"))
.build();

httppost.setEntity(reqEntity);
System. out.println("executing request "
+ httppost.getRequestLine());

CloseableHttpResponse response = httpclient.execute(httppost);

try {
System. out
.println( "----------------------------------------" );
System. out
.println(response.getStatusLine().getStatusCode());
Integer statuscode = response.getStatusLine()
.getStatusCode();

if (statuscode != 200) {
System. out.println("ошибка -сервер вернул код "
+ statuscode);
er[0] = "ошибка -сервер вернул код " + statuscode;
result = false;
}

HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
System. out.println("Response content length: "
+ resEntity.getContentLength());

String xml = EntityUtils.toString(resEntity, "UTF-8");
System. out.println(xml);
InputSource source = new InputSource(new StringReader(
xml));

DocumentBuilderFactory dbf = DocumentBuilderFactory
. newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
org.w3c.dom.Document document = db.parse(source);

String code = xpath.evaluate("/result/code" , document);
String msg = xpath
.evaluate( "/result/message", document);
String id = xpath.evaluate("/result/document_id" ,
document);

System. out.println("code=" + code);
System. out.println("message=" + msg);
System. out.println("id=" + id);

if (code.equals("ok" )) {
er[1] = id;
result = true;
} else {
er[0] = "сервер вернул " + msg;
result = false;
}

}
EntityUtils. consume(resEntity);
} finally {
response.close();
}
} finally {
httpclient.close();

}
} catch (ClientProtocolException ex) {
er[0] = "ошибка протокола или адреса " + url;
System. out.println("ошибка протокола или адреса " + url);
System. out.println(ex.toString());
result = false;
} catch (UnknownHostException ex) {
er[0] = "ошибка в адресе " + url;
System. out.println("ошибка в адресе " + url);
System. out.println(ex.toString());
result = false;
} catch (Exception e) {
er[0] = "неизвестная ошибка при отправке";
e.printStackTrace();
result = false;
} finally {

}
return result;
}