Страницы: 1
RSS
POST-запрос не выдает нужный responseText
 
Добрый день, форумчане.
На досуге решил разобраться в POST-запросах. Объектом изучения выбрал сайт http://en.excel-translator.de/, который переводит между разными языковыми версиями формул.
Вот, что есть на данный момент:
1) URLencoder (взят с просторов сети - в работоспособности не возникает сомнений):
Код
Private Function URLEncode( _
   StringVal As String, _
   Optional SpaceAsPlus As Boolean = False _
) As String

  Dim StringLen As Long: StringLen = Len(StringVal)

  If StringLen > 0 Then
    ReDim result(StringLen) As String
    Dim i As Long, CharCode As Integer
    Dim Char As String, Space As String

    If SpaceAsPlus Then Space = "+" Else Space = "%20"

    For i = 1 To StringLen
      Char = Mid$(StringVal, i, 1)
      CharCode = Asc(Char)
      Select Case CharCode
        Case 97 To 122, 65 To 90, 48 To 57, 45, 46, 95, 126
          result(i) = Char
        Case 32
          result(i) = Space
        Case 0 To 15
          result(i) = "%0" & Hex(CharCode)
        Case Else
          result(i) = "%" & Hex(CharCode)
      End Select
    Next i
    URLEncode = Join(result, "")
  End If
End Function
2) Есть следующая рутина для запроса:
Код
Const val$ = "LC=DATE_TO_REPLACE=none&LK=&LG=EN&SO=0&FT=1&XL=excel.2010.sp1&SF=FORMULA_TO_REPLACE&SL=EN&TL=RU&PC=1&PAC=2&PAI=2&TF=&Submit=Translate+formula"

Sub foo()
Dim xhr As MSXML2.ServerXMLHTTP
Dim url$
Dim ParamVar$
Dim ExcelFormula$

ExcelFormula = "=SUMPRODUCT(--(A1:A100=""x""))"
url = "http://app.excel-translator.de/index.php"
ParamVar = Replace(val, "FORMULA_TO_REPLACE", URLEncode(ExcelFormula))
ParamVar = Replace(ParamVar, "DATE_TO_REPLACE", Format(Date, "yyyymmdd"))
Set xhr = New MSXML2.ServerXMLHTTP

xhr.Open "POST", url, False
'xhr.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2327.5 Safari/537.36"
'xhr.setRequestHeader "Referer", "http://app.excel-translator.de/index.php"
'xhr.setRequestHeader "Origin", "http://app.excel-translator.de"
'xhr.setRequestHeader "Cookie", "_ga=GA1.2.19748086509.1426328693"
xhr.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

xhr.send (ParamVar)

ActiveCell = xhr.responseText
MsgBox xhr.responseText Like "*СУММ*" 'Здесь должно быть значение "True", а получается False

End Sub
3) В Python 3.4 (а значит и в Open Office) аналогичное делается на порядок легче (там то все сходится) вот так:
Код
import requests
dic = {'LC':'20150314', 'LU':'none', 'LK':'', 'LG':'EN', 'SO':'0', 'FT':'1', 'XL':'excel.2010.sp1', 'SF':'=SUMPRODUCT(--(A1:A100="x"))', 'SL':'EN', 'TL':'RU', 'PC':'1', 'PAC':'2', 'PAI':'2', 'TF':''}
r = requests.post("http://app.excel-translator.de/index.php",dic)
"СУММ" in r.text #проверяет то же что и msgbox в рутине 2
Наверное, я что-то упускаю. Может быть, чего-то в VBA не знаю. Поможете сделать перевод формулы с английского на русский? Это и мне хорошо, и, думаю, многим полезно.
ПС В выработке решения использовал Chrome DevTools/Fiddler.
С уважением,
Федор/Все_просто
 
Если я добавляю в  LK параметр значение со страницы,то работает
<input type="hidden" name="LK" value="9UMTFLP7VLEG0F0NUBZDDRR1VDCT82ODKXMD9EEBAKNKQTEZN5RJO­XODLS7VG5WT4PTUHVJQBE2EA3LFUARR">
Изменено: Doober - 14.03.2015 20:49:58
 
Почему-то изначально думал, что Doober ответит. Так и получилось.
По поводу предложения: интересно. Попробую. Другой вопрос, получится ли сделать функцию, которая бы работала на регулярной основе. Складывается ощущение, что значение для LK может меняться время от времени.  
С уважением,
Федор/Все_просто
 
Цитата
Все_просто написал:
Наверное, я что-то упускаю
Только сейчас обнаружил,когда именно ваш код пробовал.
Вы упустили в константе Const val$ = "LC=DATE_TO_REPLACE=none     LU
Const val$ = "LC=DATE_TO_REPLACE& LU=none
Можно и без "LK" обойтись
При отправке параметров в запросе не должно быть никаких явных переменных типа String.
UDF в ячейке
 
Doober, спасибо. Видно, в самом деле, пропустил значение. Занес UDF себе в копилку. Теперь будет легче переводить с английской версии на русскую.
С уважением,
Федор/Все_просто
Страницы: 1
Наверх