Имя: Пароль:
1C
1С v8
POST через HTTPСоединение и WinHttpRequest
0 Asmody
 
30.07.12
15:58
сломал сегодня немножко голову. вопрос к залу:
почему вторая функция работает, а первая — нет (возвращает 400ю ошибку)?

Function __doPost8(URI, params)
   request=New TextDocument;
   request.addLine(params);
   tmpReqFile= GetTempFileName(".request");
   request.write(tmpReqFile);
   
   tmpResFile= GetTempFileName(".response");
   headers="Content-Type: application/x-www-form-urlencoded"+CRLF
          +"Content-Length: "+strLen(params)+CRLF
          ;
         
   HTTPConnection=New HTTPConnection(__serverFromURI(URI),,,,,__isSequre(URI));
   HTTPConnection.post(tmpReqFile, __resourceFromURI(URI), tmpResFile, headers);
   
   response=New TextDocument;
   response.read(tmpResFile);
   return response.getText();
EndFunction

Function __doPostWin(URI, params)
   winHttp=New ComObject("WinHttp.WinHttpRequest.5.1");
   winHttp.open("POST", URI, 0);
   winHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
   winHttp.setRequestHeader("Content-Length", strLen(params));
   winHttp.send(params);
   return winHttp.ResponseText();    
EndFunction
1 Asmody
 
30.07.12
16:14
хочется материться, взять и уе&&ть!!!

если в первой функции вместо request.write(tmpReqFile); написать request.write(tmpReqFile, TextEncoding.ANSI); то всё работает!
2 smaharbA
 
30.07.12
16:22
(1) да
3 oleg_km
 
30.07.12
16:23
ТекстовыйДокумент (TextDocument)
Записать (Write)
Синтаксис:
Записать(<Имя файла>, <Тип файла>, <Разделитель строк>)
Параметры:
<Имя файла> (обязательный)
Тип: Строка. Имя файла для сохранения текста.
<Тип файла> (необязательный)
Тип: КодировкаТекста, Строка. Тип кодировки файла. Тип файла может быть задан как в виде значения перечисления КодировкаТекста, так и в виде строки с указанием названия кодировки.

Написано: Необязательный
4 smaharbA
 
30.07.12
16:24
(3) это тут не в тему (только опосредованно)
5 Asmody
 
30.07.12
16:25
(3) по-умолчанию там utf-8. но как-бэ и на сервере utf-8. и даже как-бэ пофиг, ибо в параметрах 146% нет ничего, кроме ascii
6 oleg_km
 
30.07.12
16:25
А, так значение по умолчанию: Значение по умолчанию: UTF8

Посмотри Fiddler'ом что в первом случае получается. Наверное веб-сервер не может переварить UTF

(4) Почему не в тему? А тогда что в тему?
7 oleg_km
 
30.07.12
16:26
тогда только Fiddler покажет в чем разница
8 Asmody
 
30.07.12
16:30
Fiddler не покажет, у меня https
9 oleg_km
 
30.07.12
16:31
Сдаюсь
10 smaharbA
 
30.07.12
17:03
(5) адинес утф8 файл с маркером идет
11 oleg_km
 
30.07.12
17:16
(10) Точно, недавно с этим боролся, с отрезанием 0xFF 0xFE от запроса в формате UTF-8. Есть функция, но она на ADO.Stream