1

Тема: AHK : Сократить текст отправляемого запроса WinHTTP

Такая проблема.
Есть сайт - http://betaface.com/demo.html#page-header
Определение лиц и.т.д.
Хотел загрузить фотографию по кнопке "Custom Upload", через IE в F12, во вкладке сеть и запущенным сбором сетевого трафика загрузил файл, появилось 3 пакета и лишь в одном во вкладке "текст запроса" был текст. Много текста. МОРЕ текста.

Весь текст не позволяет вставить сюда форум, можете сами попробовать, а вот скрин кусочка текста:
http://s7.uploads.ru/t/6OUBA.png
Что с этим можно сделать?
Пользуюсь для отправки запроса:

HTTP.Send("login=" 123 "&password=" 123 "&submit=" 123 )

Пример полученного пакета от нажатия по кнопке "вырезать" лицо.
http://s9.uploads.ru/t/pzKk4.png

2

Re: AHK : Сократить текст отправляемого запроса WinHTTP

А еще в несколько раз уменьшить размер скринов нельзя было?

3 (изменено: kangar, 2018-10-13 18:31:07)

Re: AHK : Сократить текст отправляемого запроса WinHTTP

MandarinKa02 Нужен файл с полным текстом?

Post's attachments

сеть.png 293.39 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

4

Re: AHK : Сократить текст отправляемого запроса WinHTTP

Весь текст:

Post's attachments

файл.txt 192.69 kb, 2 downloads since 2018-10-13 

You don't have the permssions to download the attachments of this post.

5

Re: AHK : Сократить текст отправляемого запроса WinHTTP

"МОРЕ текста" в данном случае закодированное изображение при помощи BASE64.

6

Re: AHK : Сократить текст отправляемого запроса WinHTTP

MandarinKa02Откуда и по куда находиться изображение? Можно ли своё изображение так загрузить? Или как-то иначе?

7

Re: AHK : Сократить текст отправляемого запроса WinHTTP

kangar пишет:

Откуда и по куда находиться изображение?

Не понял вопроса.

kangar пишет:

Можно ли своё изображение так загрузить?

Можно. Конвертируете изображение через base64 и помещаете получившуюся строку в ячейку "file_base64".

8

Re: AHK : Сократить текст отправляемого запроса WinHTTP

MandarinKa02 Эта самая строчка с изображением начинается (Я имел ввиду) на скрине ниже начало
http://sg.uploads.ru/t/fTwLl.png
А заканчивается там где красная скобка нарисована?
http://sg.uploads.ru/t/UVHM0.png
И в original_filename вписывать имя файла?

9

Re: AHK : Сократить текст отправляемого запроса WinHTTP

Да и да.

10

Re: AHK : Сократить текст отправляемого запроса WinHTTP

MandarinKa02
http://sd.uploads.ru/t/vyFaf.png
Справа изображение что я конвертнул, слева пакет отправки на сайт.
Из-за чего такая больная разница в объёме текста? Я ещё не пробовал, но просто ради интереса.

11

Re: AHK : Сократить текст отправляемого запроса WinHTTP

Вангую, под скриншотом спрятана горизонтальная полоса прокрутки(блокнот #2).

12

Re: AHK : Сократить текст отправляемого запроса WinHTTP

MandarinKa02 http://s9.uploads.ru/t/f7AZX.png
^D

13 (изменено: kangar, 2018-10-13 19:49:35)

Re: AHK : Сократить текст отправляемого запроса WinHTTP

MandarinKa02 А как этот код вообще использовать? Его полностью вставлять

HTTP.Send("login=" login "&password=" password "&submit=СЮДА?")

14

Re: AHK : Сократить текст отправляемого запроса WinHTTP

MandarinKa02 В чём трабл?
Конвертил тут: http://anosov.me/services-base64image/
Картинка - http://sd.uploads.ru/t/h5ziQ.png

Post's attachments

script.ahk 12.25 kb, 2 downloads since 2018-10-13 

You don't have the permssions to download the attachments of this post.

15

Re: AHK : Сократить текст отправляемого запроса WinHTTP

HTTP.Send("login=" login "&password=" password "&submit=СЮДА?")

Где вы это взяли? Поищите на форуме темы по этому поводу. Там есть куча примеров.

Вставляете туда переменную в которой хранятся данные для отправки. Думаю, сами знаете какие данные.
(не забываем про заголовок)

HTTP.Send(data)

16 (изменено: MandarinKa02, 2018-10-13 20:48:37)

Re: AHK : Сократить текст отправляемого запроса WinHTTP

Первая ошибка:

msgbox % HTTP.ResponseText

Вторая: (отправляемый текст должен быть в кавычках. В вашем скрипте ahk воспринимает аргумент функции как объект)

HTTP.Send(*груда_текста/*)

Третья: (уверены, что URL правилен?)

HTTP.Open("POST", "http://betaface.com/demo.html#page-header", true)

17

Re: AHK : Сократить текст отправляемого запроса WinHTTP

MandarinKa02

HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("POST", "http://betaface.com/demo.html#page-header", true)
HTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)")
HTTP.SetRequestHeader("Pragma", "no-cache")
HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
HTTP.Send("login=" login "&password=" password "&submit=СЮДА?")

Чаще всего на мой взгляд мелькало на форуме.
И я вот не знал, можно писать:
Так

HTTP.Send("login=" login "&password=" password "&submit=СЮДА?")

Или же так? Я правильно понял?

asd = "login=" login "&password=" password "&submit=СЮДА?"
HTTP.Send(asd)

Файл ниже, выдаёт это: http://s8.uploads.ru/t/9tR1l.png

Post's attachments

script.ahk 12.25 kb, 1 downloads since 2018-10-13 

You don't have the permssions to download the attachments of this post.

18

Re: AHK : Сократить текст отправляемого запроса WinHTTP

MandarinKa02 url правильный
http://s9.uploads.ru/t/kSWyo.png

19

Re: AHK : Сократить текст отправляемого запроса WinHTTP

Для начала бы стоило познакомиться как с самим AHK, так и с языками программирования: что это и для чего, синтаксис и др. Иметь хоть какое-то представление об этом.
И уже после, пробовать писать программы.


HTTP.Send("login=" login "&password=" password "&submit=СЮДА?")

равнозначно

data:="login=" login "&password=" password "&submit=СЮДА?"
HTTP.Send(data)
kangar пишет:

url правильный

Уверены?

20

Re: AHK : Сократить текст отправляемого запроса WinHTTP

MandarinKa02 Мой прокол, такой url https://betaface.com/demo.html

21

Re: AHK : Сократить текст отправляемого запроса WinHTTP

Даже не этот.

22

Re: AHK : Сократить текст отправляемого запроса WinHTTP

MandarinKa02 Нашел ссылку. НО Всё равно Не отправляет.

https://www.betafaceapi.com/demo.html

Post's attachments

script (1).ahk 12.25 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

23

Re: AHK : Сократить текст отправляемого запроса WinHTTP

Не мучайтесь.

FileSelectFile, filePath,,, Выберите файл изображения, Изображения (*.gif; *.tif; *.tiff; *.jpg; *.jpeg; *.png; *.bmp)
if !filePath
   Return

oFile := FileOpen(filePath, "r", "cp0")
size := oFile.RawRead(buff, oFile.length())
oFile.Close()
base64 := CryptBinaryToStringBASE64(&buff, size, true)
obj := { api_key:         "d45fd466-51e2-4701-8da8-04351c872236"
       , detection_flags: "cropface,recognition,content,classifiers,basicpoints,propoints"
       , file_base64:     base64 }
JSON := json_fromobj(obj)

oWhr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
oWhr.Open("POST", "https://www.betafaceapi.com/api/v2/media", false)

oWhr.SetRequestHeader("Content-Type", "application/json")
oWhr.SetRequestHeader("Content-Length", StrLen(JSON))
oWhr.SetRequestHeader("Connection", "keep-alive")
oWhr.SetRequestHeader("Referer", "https://betaface.com/demo.html")
oWhr.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko")
oWhr.Send(JSON)
MsgBox, % JSON := oWhr.ResponseText

CryptBinaryToStringBASE64(pData, bytes, NOCRLF = "")
{
   static CRYPT_STRING_BASE64 := 1, CRYPT_STRING_NOCRLF := 0x40000000
   CRYPT := CRYPT_STRING_BASE64 | (NOCRLF ? CRYPT_STRING_NOCRLF : 0)
   
   DllCall("Crypt32\CryptBinaryToString", Ptr, pData, UInt, bytes, UInt, CRYPT, Ptr, 0, UIntP, chars)
   VarSetCapacity(outData, chars << !!A_IsUnicode)
   DllCall("Crypt32\CryptBinaryToString", Ptr, pData, UInt, bytes, UInt, CRYPT, Str, outData, UIntP, chars)
   Return outData
}

json_fromobj(obj)  {
   if IsObject( obj )  {
      isArray := true
      for key in obj
         if !( key = A_Index || isArray := false )
            break
         
      for k, v in obj
         str .= ( A_Index = 1 ? "" : "," ) . ( isArray ? "" : json_fromobj(k) . ":" ) . json_fromobj(v)

      return isArray ? "[" str "]" : "{" str "}"
   }
   else if !(obj*1 = "" || RegExMatch(obj, "\s"))
      return obj
   
   for k, v in [["\", "\\"], [A_Tab, "\t"], ["""", "\"""], ["/", "\/"], ["`n", "\n"], ["`r", "\r"], [Chr(12), "\f"], [Chr(08), "\b"]]
      obj := StrReplace( obj, v[1], v[2] )
   
   while RegexMatch( obj, "[^\x20-\x7e]", key )  {
      str := Asc( key )
      val := "\u" . Chr( ( ( str >> 12 ) & 15 ) + ( ( ( str >> 12 ) & 15 ) < 10 ? 48 : 55 ) )
            . Chr( ( ( str >> 8 ) & 15 ) + ( ( ( str >> 8 ) & 15 ) < 10 ? 48 : 55 ) )
            . Chr( ( ( str >> 4 ) & 15 ) + ( ( ( str >> 4 ) & 15 ) < 10 ? 48 : 55 ) )
            . Chr( ( str & 15 ) + ( ( str & 15 ) < 10 ? 48 : 55 ) )
      obj := StrReplace(obj, key, val)
   }
   Return """" obj """"
}

Там, правда, есть значение ключа — api_key: "d45fd466-51e2-4701-8da8-04351c872236" — не уверен, что оно постоянное.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

24

Re: AHK : Сократить текст отправляемого запроса WinHTTP

Ну его можно проверять на http://betaface.com/demo.html.

25 (изменено: teadrinker, 2018-10-14 15:33:12)

Re: AHK : Сократить текст отправляемого запроса WinHTTP

Хах, точно, он там открытым текстом записан. Тогда так:

; upload file to https://betaface.com/demo.html

FileSelectFile, filePath,, %A_ScriptDir%, Выберите файл изображения, Изображения (*.gif; *.ti*f; *.jp*g; *.png; *.bmp)
if !filePath
   Return

oWhr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
oWhr.Open("GET", "http://betaface.com/demo.html", false)
oWhr.Send()
if (oWhr.Status != 200 || !RegExMatch(oWhr.ResponseText, "'api_key':\s'\K.+?(?=')", api_key))  {
   MsgBox, Fail
   Return
}
oFile := FileOpen(filePath, "r", "cp0")
size := oFile.RawRead(buff, oFile.length())
oFile.Close()
base64 := CryptBinaryToStringBASE64(&buff, size, true)

JSON := "{'api_key':'"     . api_key . "',"
       . "'detection_flags':'cropface,recognition,content,classifiers,basicpoints,propoints',"
       . "'file_base64':'" . base64 . "'}"
       
headers := { "Content-Type":   "application/json"
           , "Content-Length":  StrLen(JSON)
           , "Connection":     "keep-alive"
           , "Referer":        "https://betaface.com/demo.html"
           , "User-Agent":     "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" }
           
oWhr.Open("POST", "https://www.betafaceapi.com/api/v2/media", false)
for k, v in headers
   oWhr.SetRequestHeader(k, v)
oWhr.Send(JSON)
MsgBox, % JSON := oWhr.ResponseText

CryptBinaryToStringBASE64(pData, bytes, NOCRLF = "")
{
   static CRYPT_STRING_BASE64 := 1, CRYPT_STRING_NOCRLF := 0x40000000
   CRYPT := CRYPT_STRING_BASE64 | (NOCRLF ? CRYPT_STRING_NOCRLF : 0)
   
   DllCall("Crypt32\CryptBinaryToString", Ptr, pData, UInt, bytes, UInt, CRYPT, Ptr, 0, UIntP, chars)
   VarSetCapacity(outData, chars << !!A_IsUnicode)
   DllCall("Crypt32\CryptBinaryToString", Ptr, pData, UInt, bytes, UInt, CRYPT, Str, outData, UIntP, chars)
   Return outData
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

26

Re: AHK : Сократить текст отправляемого запроса WinHTTP

teadrinker Спасибо большое за код.
Если разрешите, задам вопрос немного уходящий от темы (не хочу создавать новую тему для этого)

html := oWhr.ResponseText
RegExMatch(html, "div class=""row box""><img.*> src=(.*?)", arc)
MsgBox, % arc1

http://sg.uploads.ru/t/JwL1Z.png
Я хочу вытащить картинку со страницы, а точнее её вид в base64.
Этот код находится вот src="тут" Пробую вытащить через регулярку - не выходит.
По поводу закрытия </img> и </div> -  Scrite4Autohotkey светит синтаксис, я что-то упустил.
http://s8.uploads.ru/t/s6IMT.png

27

Re: AHK : Сократить текст отправляемого запроса WinHTTP

Так должно найтись:

RegExMatch(html, "<img id=""search_original_image"".+?src=""\K[^""]+", src)
MsgBox, % src
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

28

Re: AHK : Сократить текст отправляемого запроса WinHTTP

teadrinker Должно, да не нашло:
Вот весь путь к картинке:
http://s5.uploads.ru/t/hrJom.png
Как это выглядит без картинки:
http://sd.uploads.ru/t/HJQpj.png

29

Re: AHK : Сократить текст отправляемого запроса WinHTTP

Я не совсем понял, вы пытаетесь найти картинку, которой нет?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

30

Re: AHK : Сократить текст отправляемого запроса WinHTTP

teadrinker Нет. Это я просто показал, как устроена страница с картинкой и без неё.

31 (изменено: teadrinker, 2018-10-15 19:10:55)

Re: AHK : Сократить текст отправляемого запроса WinHTTP

А почему вы решили, что она там есть? Потому, что видите её на экране?
Вот смотрите:

html =
(

                  <div>
                    <!-- Slider -->
                      <div class="row box">
                            <img id="search_original_image" class="img-responsive" src="этот текст нам нужно найти">
                            <span class="text-center">Original Face</span>
                      </div>
                      <div class="loading" id="search_loading" style="    position: relative;top: 57px;margin-bottom: 124px;"></div>

                      <div id="search_text_result" style="color: #e51837;font-size: 18px;text-align: center;display: none;"></div>
                      <div class="row" id="search_result_section" style="">
                          <div id="content-2" class="content">
                              <ul>
                              </ul>
                          </div>
                     </div>
                  </div>
)
RegExMatch(html, "<img id=""search_original_image"".+?src=""\K[^""]+", src)
MsgBox, % src 
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

32

Re: AHK : Сократить текст отправляемого запроса WinHTTP

teadrinker
Пробую с вашим куском кода - выдает нужный текст. ("этот текст нам нужно найти")
Загружаю страницу просто без картинки (Если её нет, должно выдать unknow)

oWhr.Open("GET", "http://betaface.com/demo.html", false)
oWhr.Send() 
MsgBox % oWhr.ResponseText()
html := oWhr.ResponseText
RegExMatch(html, "<img id=""search_original_image"".+?src=""\K[^""]+", src)
MsgBox, % src1

- пусто.

33

Re: AHK : Сократить текст отправляемого запроса WinHTTP

kangar пишет:

Если её нет, должно выдать unknow

Не знаю, мне такой html приходит:

https://i.imgur.com/9wqdVQf.png

Никакого «unknow», как видите. Сохраните ResponseText в буфер обмена, откройте в блокноте.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

34

Re: AHK : Сократить текст отправляемого запроса WinHTTP

teadrinker Действительно, нет никакого unknow. НО!
Выдаёт пустое значение и с загруженной фотографией. Это происходит из-за того, что я вызываю не ту страницу. Один из первых кодов что вы скинули(Пост #25) загружает картинку через api сайта(https://www.betafaceapi.com/api/v2/media), не заметив этого я начал открывать новую страницу (http://betaface.com/demo.html) из-за чего фотография пропадает.
Напрашивается вопрос - какую ссылку использовать для парса "src=" ?
Перейдя по ссылке api выдаёт пустую страницу и

{
  "error_code": -1,
  "error_description": "invalid api key or secret"
}

35

Re: AHK : Сократить текст отправляемого запроса WinHTTP

kangar пишет:

Напрашивается вопрос - какую ссылку использовать для парса "src=" ?

Надеюсь, вопрос риторический? Мне разработчики сайта не сообщали.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

36 (изменено: kangar, 2018-10-15 22:33:09)

Re: AHK : Сократить текст отправляемого запроса WinHTTP

teadrinker Да, никак. У них api есть только для фото. Тут нужно весь код переписывать, чтобы сделать как я хотел. (Пост № 26 и далее)
Спасибо за помощь и хорошие примеры.

37

Re: AHK : Сократить текст отправляемого запроса WinHTTP

kangar, объясните словами, что вы хотите получить.