<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Отправка фото на сервер]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14709&amp;type=atom" />
	<updated>2019-04-21T18:28:16Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=14709</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отправка фото на сервер]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=133747#p133747" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong>, благодарю за поддержку. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Тогда подумаю над доделкой примеров на других языках.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2019-04-21T18:28:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=133747#p133747</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отправка фото на сервер]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=133746#p133746" />
			<content type="html"><![CDATA[<p>А что тут сомневаться, больше инструментов всегда лучше, чем меньше. В небольшом проекте на скорую руку, когда не зачем лезть в дебри, или в большом, когда и так много всего, везде сгодится. Тем более если нет аналога, с полным функционалом.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2019-04-21T18:19:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=133746#p133746</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отправка фото на сервер]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=133745#p133745" />
			<content type="html"><![CDATA[<p><strong>Malcev</strong>,<br /></p><div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>А почему с нуля?<br />Есть готовая функция, которую использовал teadrinker - CreateFormData.<br />Если бы топикстартер удосужился поискать по форуму, то нашел бы ее с отсылкой на оф.форум, где показывается ее применение и через ADODB и без.</p></blockquote></div><p>Согласен, но эта функция не охватывает все способы кодирования, доступные для данных формы:<br />Для метода GET сборка параметров в URL<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p>&lt;form action=&quot;...&quot; method=&quot;GET&quot;&gt;<br />&lt;input name=&quot;field1&quot;&gt;<br />&lt;input name=&quot;field2&quot;&gt;<br />...<br />&lt;/form&gt;</p></div></div><p>Для метода POST с типами кодирования:<br />1) &quot;application/x-www-form-urlencoded&quot; <br />2) &quot;text/plain&quot;</p><p>Я постарался собрать универсальный вариант. Понимаю, что наверняка напрашивается ответ - для конкретной задачи загрузки файла(ов) на сервер, нужен только тип кодирования &quot;multipart/form-data&quot;. Я же заложил логику на все случаи жизни так как при автоматизации работы с различными сайтами случается так, что приходится &quot;проваливаться&quot; по страницам с разными формами. Благодаря этому объекту можно передать в него свойства HTML формы, поля и получить подготовленные данные для WinHttpRequest / XMLHttpRequest, не задумываясь о том какой тип кодирования у формы, что резко упрощает дальнейшую разработку.</p><p><strong>teadrinker</strong>,</p><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>А зачем для AHK wsc-файл нужен? Смотри мой пример.</p></blockquote></div><p>Так я же как раз и пояснил в сообщении выше. Удобство в простоте &quot;переброса&quot; используемого объекта с одного языка на другой - модульность / универсальность. <br />Да, для AHK есть написанный код <strong>CreateFormData</strong>, но его нельзя задействовать в JS / VBS не переписав. А с WSC нет нужды в пересборке. Собственно почему мы используем COM объекты, а не переписываем их код под каждый язык ? Думаю в этом и есть некое удобство.</p><p><strong>serzh82saratov</strong>, ну как время будет - попробую. ) Надо ещё понять востребованность данной задачи. Вот коллеги пока сомневаются. Я от части разделяю их мнение.</p><p>И конечно же, я согласен, что такое решение содержит свой ряд изъянов, но пмсм, плюсы перевешивают. По крайней мере, в тех ситуациях, где я его использовал, для меня плюсов было больше. )</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2019-04-21T17:57:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=133745#p133745</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отправка фото на сервер]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=133724#p133724" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Malcev, да документалки хватает, но порой не хочется изобретать велосипед с нуля</p></blockquote></div><p>А почему с нуля?<br />Есть готовая функция, которую использовал <strong>teadrinker</strong> - CreateFormData.<br />Если бы топикстартер удосужился поискать по форуму, то нашел бы ее с отсылкой на оф.форум, где показывается ее применение и через ADODB и без.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-04-21T10:47:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=133724#p133724</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отправка фото на сервер]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=133723#p133723" />
			<content type="html"><![CDATA[<p>А зачем для AHK wsc-файл нужен? Смотри мой пример.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2019-04-21T10:41:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=133723#p133723</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отправка фото на сервер]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=133722#p133722" />
			<content type="html"><![CDATA[<p>Думаю для начинающих тут не помешает пример использования с AutoHotkey, например аналог imgur.com.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2019-04-21T10:26:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=133722#p133722</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отправка фото на сервер]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=133718#p133718" />
			<content type="html"><![CDATA[<p><strong>Malcev</strong>, да документалки хватает, но порой не хочется изобретать велосипед с нуля, если уже есть готовые. Я когда-то давно сделал себе заготовку в виде WSC компонента для упрощения подготовки данных. И с тех пор она много раз меня выручала (загрузка курсов с cbr.ru / автоматические загрузки файлов на ресурсы / автоматизация отправки форм на различных ресурсах). Для меня удобство в том, что WSC:<br />а) Адаптивен под разные языки. Можно не переписывать весь код, если захочется использовать в другой среде.<br />б) Исходный код доступен для просмотра и модификации.<br />в) Объект можно подгружать с внешнего ресурса.<br />г) Не требует регистрации в большинстве случаев.</p><p>Вчера решил попробовать закинуть вариант на гитхаб. </p><p><a href="https://github.com/diqipib/formDataEncoder/">formDataEncoder</a></p><p>Пока получается коряво, так как опыта в этом нет, но надеюсь со временем научусь.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2019-04-20T23:37:38Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=133718#p133718</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отправка фото на сервер]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=133706#p133706" />
			<content type="html"><![CDATA[<p><strong>wladkokopops</strong>, если бы вы вбили в поиск &quot;multipart/form-data&quot;, то увидели бы достаточно примеров как заливать файлы этим сообщением.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-04-20T12:37:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=133706#p133706</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отправка фото на сервер]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=133692#p133692" />
			<content type="html"><![CDATA[<p><strong>wladkokopops</strong>, рад, что смог помочь. А Вам спасибо за информацию о получении токена и полезный ресурс. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> В основной документации не видел подробностей про &quot;прямую авторизацию&quot;.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2019-04-20T07:57:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=133692#p133692</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отправка фото на сервер]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=133690#p133690" />
			<content type="html"><![CDATA[<p><strong>Xameleon</strong><br />Ура, работатет!<br />Огромное спасибо!<br />+ В репу однозначно.</p>]]></content>
			<author>
				<name><![CDATA[wladkokopops]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34240</uri>
			</author>
			<updated>2019-04-20T04:18:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=133690#p133690</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отправка фото на сервер]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=133689#p133689" />
			<content type="html"><![CDATA[<p>Тоже решил попробовать свои силы. Получил токен, как Вы и предлагали. Загрузка на сервак прошла вообще без проблем.</p><p>Пример на JS в аттаче. Вот ответ сервера:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>
[
        {
                &quot;photo&quot;: &quot;c9caff4d6b:x&quot;,
                &quot;sizes&quot;: [
                        [
                                &quot;s&quot;,
                                854320297,
                                &quot;2817a&quot;,
                                &quot;zDaZi9O3wfI&quot;,
                                75,
                                75
                        ],
                        [
                                &quot;m&quot;,
                                854320297,
                                &quot;2817b&quot;,
                                &quot;qMQLFw2Np34&quot;,
                                130,
                                130
                        ],
                        [
                                &quot;x&quot;,
                                854320297,
                                &quot;2817c&quot;,
                                &quot;KRmDXHyMVcA&quot;,
                                225,
                                225
                        ],
                        [
                                &quot;o&quot;,
                                854320297,
                                &quot;2817d&quot;,
                                &quot;gdsFzVnJo1A&quot;,
                                130,
                                130
                        ],
                        [
                                &quot;p&quot;,
                                854320297,
                                &quot;2817e&quot;,
                                &quot;OE9cc9pwEIA&quot;,
                                200,
                                200
                        ],
                        [
                                &quot;q&quot;,
                                854320297,
                                &quot;2817f&quot;,
                                &quot;4wThdxLDmxE&quot;,
                                225,
                                225
                        ],
                        [
                                &quot;r&quot;,
                                854320297,
                                &quot;28180&quot;,
                                &quot;UfyFBGhUTZE&quot;,
                                225,
                                225
                        ]
                ],
                &quot;latitude&quot;: 0,
                &quot;longitude&quot;: 0,
                &quot;kid&quot;: &quot;8d6f44a10ece33d20957655622e49256&quot;
        }
]
</code></pre></div></div></div><p>Попытался разобраться с Вашим кодом. Понял, что всё упирается в то, что AHK передаёт строку вместо байтового массива в объект webFormDataBuilder.<br />Честно говоря лень было разбираться с функционалом AHK. Так что вставил чтение через ADODB.Stream. При этом скрипт работает нормально.</p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>
Token := &quot;...&quot;
ID := &quot;94&quot; ; ид беседы в которую загрузить фото, если меньше 10 то подставить 0 (04,07 и.т.д)

;ComObjError(false) 

;Загрузка объекта HTMLDocument
document := ComObjCreate(&quot;htmlfile&quot;)
;Установка режима совместимости
document.writeln(&quot;&lt;meta http-equiv=&quot;&quot;x-ua-compatible&quot;&quot; content=&quot;&quot;IE=Edge&quot;&quot;/&gt;&quot;)
;Получение объекта JSON для разбора JSON данных
JSON := document.parentWindow.JSON

whr := ComObjCreate(&quot;WinHttp.WinHttpRequest.5.1&quot;) 
whr.Option(0) := &quot;Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36&quot;

whr.Open(&quot;GET&quot;, &quot;https://api.vk.com/method/photos.getMessagesUploadServer?peer_id=1&amp;access_token=&quot; . Token . &quot;&amp;v=5.95&quot;, false) 
whr.Send() 
data := JSON.parse(whr.responseText)

if not data.hasOwnProperty(&quot;response&quot;) {
	MsgBox Request Failed
	exit
}

upload_url := data.response.upload_url

;Создание и настройка объекта для построения данных формы
form			:= ComObjGet(&quot;script:file:webFormDataBuilder.wsc&quot;)
form.method		:= &quot;POST&quot;
form.action		:= upload_url
form.enctype	:= &quot;multipart/form-data&quot;
;Загрузка тела файла в буффер
fileName := &quot;image.png&quot;

;Добавление тела файла в запрос
form.addFileField(&quot;photo&quot;, fileName, readFile(fileName))
file.Close()

;Подготовка запроса к сервису
whr	:= ComObjCreate(&quot;WinHttp.WinHttpRequest.5.1&quot;)
whr.open(form.method, form.action, false)
whr.setRequestHeader(&quot;Content-Type&quot;,form.contentType)
whr.send(form.build())

MsgBox % whr.responseText

readFile(fileName){
	stream := ComObjCreate(&quot;ADODB.Stream&quot;)
	stream.Type := 1
	stream.Open()
	stream.LoadFromFile(fileName)
	return stream.Read()
}
</code></pre></div></div></div>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2019-04-19T22:50:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=133689#p133689</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отправка фото на сервер]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=133687#p133687" />
			<content type="html"><![CDATA[<p>Ради интереса решил попробовать. Вот так удалось загрузить фото в свой альбом:<br /></p><div class="codebox"><pre><code>; Выполнение запросов к API ВКонтакте: https://vk.com/dev/api_requests
; Загрузка файлов:                     https://vk.com/dev/upload_files

accessToken := &quot;cfcc912ff7d7d2d83e4bb99f89b81ecd1b5061d5c48cde42a7eca6&quot; ; указать свой access_token
albumId     := 102453589                                                ; album_id
filePath    := &quot;D:\Downloads\Иконки\test.png&quot;

JS := CreateScriptObj()
url := GetUrl(accessToken, albumId, JS)
SendFile(filePath, url, JS, server, photos_list, aid, hash)
MsgBox, % SaveFile(accessToken, server, photos_list, aid, hash)

GetUrl(accessToken, albumId, JS) {
   queryUrl := &quot;https://api.vk.com/method/photos.getUploadServer?album_id=&quot; . albumId . &quot;&amp;access_token=&quot; . accessToken . &quot;&amp;v=5.95.&quot;
   whr := ComObjCreate(&quot;WinHttp.WinHttpRequest.5.1&quot;)
   whr.Open(&quot;GET&quot;, queryUrl, false)
   whr.Send()
   if (whr.Status != 200)
      throw Exception(whr.responseText)
   Return JS.(&quot;JSON.parse(&#039;&quot; . whr.ResponseText . &quot;&#039;).response.upload_url&quot;)
}

SendFile(filePath, url, JS, ByRef server, ByRef photos_list, ByRef aid, ByRef hash) {
   CreateFormData(postData, hdr_ContentType, {file: [filePath]})
   
   whr := ComObjCreate(&quot;WinHttp.WinHttpRequest.5.1&quot;)
   whr.Open(&quot;POST&quot;, url, false)
   whr.SetRequestHeader(&quot;Content-Type&quot;, hdr_ContentType)
   whr.Send(postData)
   if (whr.Status != 200)
      throw Exception(whr.responseText)
   else {
      responseText := whr.responseText
      for k, v in [&quot;server&quot;, &quot;photos_list&quot;, &quot;aid&quot;, &quot;hash&quot;]
         %v% := StrReplace(JS.(&quot;JSON.parse(&#039;&quot; . StrReplace(responseText, &quot;\&quot;&quot;&quot;, &quot;|&quot;) . &quot;&#039;).&quot; . v), &quot;|&quot;, &quot;&quot;&quot;&quot;)
   }
}

SaveFile(accessToken, server, photos_list, aid, hash) {
   queryUrl := &quot;https://api.vk.com/method/photos.save?server=&quot;       . server
                                                  . &quot;&amp;photos_list=&quot;  . URIEncode(photos_list)
                                                  . &quot;&amp;aid=&quot;          . aid
                                                  . &quot;&amp;hash=&quot;         . hash
                                                  . &quot;&amp;album_id=&quot;     . aid
                                                  . &quot;&amp;access_token=&quot; . accessToken . &quot;&amp;v=5.95.&quot;
   whr := ComObjCreate(&quot;WinHttp.WinHttpRequest.5.1&quot;)
   whr.Open(&quot;GET&quot;, queryUrl, false)
   whr.Send()
   Return % whr.responseText
}

CreateScriptObj() {
   static doc
   doc := ComObjCreate(&quot;htmlfile&quot;)
   doc.write(&quot;&lt;meta http-equiv=&#039;X-UA-Compatible&#039; content=&#039;IE=9&#039;&gt;&quot;)
   Return ObjBindMethod(doc.parentWindow, &quot;eval&quot;)
}

URIEncode(str, encoding := &quot;UTF-8&quot;)  {
   VarSetCapacity(var, StrPut(str, encoding))
   StrPut(str, &amp;var, encoding)

   While code := NumGet(Var, A_Index - 1, &quot;UChar&quot;)  {
      bool := (code &gt; 0x7F || code &lt; 0x30 || code = 0x3D)
      UrlStr .= bool ? &quot;%&quot; . Format(&quot;{:02X}&quot;, code) : Chr(code)
   }
   Return UrlStr
}

CreateFormData(ByRef retData, ByRef retHeader, objParam) {
   new CreateFormData(retData, retHeader, objParam)
}

class CreateFormData
{
   __New(ByRef retData, ByRef retHeader, objParam) {
      CRLF := &quot;`r`n&quot;, i, k, v, str, pvData
      ; Create a random Boundary
      Boundary := this.RandomBoundary()
      BoundaryLine := &quot;------------------------------&quot; . Boundary

      this.Len := 0 ; GMEM_ZEROINIT|GMEM_FIXED = 0x40
      this.Ptr := DllCall(&quot;GlobalAlloc&quot;, UInt, 0x40, UInt, 1, Ptr)

      ; Loop input paramters
      for k, v in objParam
      {
         if IsObject(v) {
            for i, FileName in v
            {
               str := BoundaryLine . CRLF
                    . &quot;Content-Disposition: form-data; name=&quot;&quot;&quot; . k . &quot;&quot;&quot;; filename=&quot;&quot;&quot; . FileName . &quot;&quot;&quot;&quot; . CRLF
                    . &quot;Content-Type: &quot; . this.MimeType(FileName) . CRLF . CRLF
               this.StrPutUTF8( str )
               this.LoadFromFile( Filename )
               this.StrPutUTF8( CRLF )
            }
         }
         else {
            str := BoundaryLine . CRLF
                 . &quot;Content-Disposition: form-data; name=&quot;&quot;&quot; . k &quot;&quot;&quot;&quot; . CRLF . CRLF
                 . v . CRLF
            this.StrPutUTF8( str )
         }
      }
      this.StrPutUTF8( BoundaryLine . &quot;--&quot; . CRLF )

      ; Create a bytearray and copy data in to it.
      retData := ComObjArray(0x11, this.Len)       ; Create SAFEARRAY = VT_ARRAY|VT_UI1
      pvData  := NumGet( ComObjValue( retData ) + 8 + A_PtrSize )
      DllCall(&quot;RtlMoveMemory&quot;, Ptr, pvData, Ptr, this.Ptr, Ptr, this.Len)

      this.Ptr := DllCall(&quot;GlobalFree&quot;, Ptr, this.Ptr, Ptr)
      retHeader := &quot;multipart/form-data; boundary=----------------------------&quot; . Boundary
   }

   StrPutUTF8( str ) {
      ReqSz := StrPut( str, &quot;utf-8&quot; ) - 1
      this.Len += ReqSz                                  ; GMEM_ZEROINIT|GMEM_MOVEABLE = 0x42
      this.Ptr := DllCall(&quot;GlobalReAlloc&quot;, Ptr, this.Ptr, UInt, this.len + 1, UInt, 0x42)   
      StrPut(str, this.Ptr + this.len - ReqSz, ReqSz, &quot;utf-8&quot;)
   }
  
   LoadFromFile( Filename ) {
      objFile := FileOpen( FileName, &quot;r&quot; )
      this.Len += objFile.Length                     ; GMEM_ZEROINIT|GMEM_MOVEABLE = 0x42 
      this.Ptr := DllCall(&quot;GlobalReAlloc&quot;, Ptr, this.Ptr, UInt, this.len, UInt, 0x42)
      objFile.RawRead( this.Ptr + this.Len - objFile.length, objFile.length )
      objFile.Close()
   }

   RandomBoundary() {
      str := &quot;0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z&quot;
      Sort, str, D| Random
      str := StrReplace(str, &quot;|&quot;)
      Return SubStr(str, 1, 12)
   }

   MimeType(FileName) {
      n := FileOpen(FileName, &quot;r&quot;).ReadUInt()
      Return (n        = 0x474E5089) ? &quot;image/png&quot;
           : (n        = 0x38464947) ? &quot;image/gif&quot;
           : (n&amp;0xFFFF = 0x4D42    ) ? &quot;image/bmp&quot;
           : (n&amp;0xFFFF = 0xD8FF    ) ? &quot;image/jpeg&quot;
           : (n&amp;0xFFFF = 0x4949    ) ? &quot;image/tiff&quot;
           : (n&amp;0xFFFF = 0x4D4D    ) ? &quot;image/tiff&quot;
           : &quot;application/octet-stream&quot;
   }
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2019-04-19T21:53:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=133687#p133687</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отправка фото на сервер]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=133685#p133685" />
			<content type="html"><![CDATA[<p>Беру токен отсюда<br /><a href="https://vkhost.github.io">https://vkhost.github.io</a><br />беру от Katemobile,<br />Так же можно получить токен через прямой вход:<br /></p><div class="codebox"><pre><code>https://oauth.vk.com/token?grant_type=password&amp;client_id=2274003&amp;client_secret=hHbZxrka2uZ6jB1inYsH&amp;username=&quot; Login &quot;&amp;password=&quot; password &quot;</code></pre></div><p>Используя такой пост, и получить в ответ токен -<br />Где Логин - номер телефона,<br />пароль - явно тот самый пароль.</p><p><strong>Xameleon</strong></p>]]></content>
			<author>
				<name><![CDATA[wladkokopops]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34240</uri>
			</author>
			<updated>2019-04-19T19:39:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=133685#p133685</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отправка фото на сервер]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=133679#p133679" />
			<content type="html"><![CDATA[<p><strong>wladkokopops</strong>, идеи есть всегда. ) Но для начала, чтобы попробовать выполнить Ваш код, мне надо получить access_token. Как будет время - поизучаю. Давно не ковырял API вконтакта.</p><p>Кстати, Вы каким из методов получаете <strong>access_token</strong> ?</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2019-04-19T16:46:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=133679#p133679</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отправка фото на сервер]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=133675#p133675" />
			<content type="html"><![CDATA[<p>Есть идеи?</p>]]></content>
			<author>
				<name><![CDATA[wladkokopops]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34240</uri>
			</author>
			<updated>2019-04-19T15:43:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=133675#p133675</id>
		</entry>
</feed>
