Я настроил тестовую веб-страницу, на которую я пытаюсь передать информацию (чтобы вызвать действие), но когда я пытаюсь это сделать, ничего не происходит. Когда я запускаю это в веб-браузере, я получаю вывод из условия else, затем слово DONE, как я и ожидал. Почему мой скрипт AHK не возвращает данные из условия if?
test.php
<?php
echo $_POST['userMe'].$_POST['passME'];
if(isset($_POST['userMe']))
{
echo "user value was passed by POST var when page was loaded. Do action.....this is what I expect to happen";
}
else
{
echo "no user provided by POST var";
}
echo '<br>DONE';
?>
web_request.ahk
#include httpQuery.ahk
#noenv
#SingleInstance force
html := ""URL := "http://MY_IP_HERE/test.php"POSTData := "userME=hello&passME=bye"
length := httpQuery(html,URL,POSTdata)
varSetCapacity(html,-1)
Gui,Add,Edit,w600 +Wrap r25,% html
Gui,Show
Return
GuiClose:
GuiEscape:
ExitApp
Это может быть проблема с httpQuery.ahk
функция, возможно, вам следует спросить автора, правильно ли вы ее используете. Я никогда не использовал это раньше.
Я использую аналогичную функцию для достижения этого, называется InternetFileRead
и у меня это работает. Возможно, вы можете попробовать это. К сожалению это было написано СКАН на старых форумах АХК который известен своим плохо отформатированным кодом в своей ошибочной попытке написать код настолько компактно, насколько это возможно. Смотрите ссылку для описания параметров func.
Вот как будет выглядеть ваш пример:
response := ""url := "http://MY_IP_HERE/test.php?userME=hello&passME=bye"size_to_read := 1024
dl_buffer := 128
length := InternetFileRead(response, url, size_to_read, dl_buffer)
Gui,Add,Edit,w600 +Wrap r25,% html
Gui,Show
return; http://www.autohotkey.com/forum/topic45718.html
InternetFileRead( ByRef V, URL="", RB=0, bSz=1024, DLP="DLP", F=0x84000000 ) {
Static LIB="WININET\", CL="00000000000000", N=""QRL := 16
If ! DllCall( "GetModuleHandle", Str,"wininet.dll" )
DllCall( "LoadLibrary", Str,"wininet.dll" )
If ! hIO:=DllCall( LIB "InternetOpenA", Str,N, UInt,4, Str,N, Str,N, UInt,0 )
Return -1
If ! (( hIU:=DllCall( LIB "InternetOpenUrlA", UInt,hIO, Str,URL, Str,N, Int,0, UInt,F
, UInt,0 ) ) || ErrorLevel )
Return 0 - ( !DllCall( LIB "InternetCloseHandle", UInt,hIO ) ) - 2
If ! ( RB )
If ( SubStr(URL,1,4) = "ftp:" )
CL := DllCall( LIB "FtpGetFileSize", UInt,hIU, UIntP,0 )
Else If ! DllCall( LIB "HttpQueryInfoA", UInt,hIU, Int,5, Str,CL, UIntP,QRL, UInt,0 )
Return 0 - ( !DllCall( LIB "InternetCloseHandle", UInt,hIU ) )
- ( !DllCall( LIB "InternetCloseHandle", UInt,hIO ) ) - 4
VarSetCapacity( V,64 ), VarSetCapacity( V,0 )
SplitPath, URL, FN,,,, DN
FN:=(FN ? FN : DN), CL:=(RB ? RB : CL), VarSetCapacity( V,CL,32 ), P:=&V,
B:=(bSz>CL ? CL : bSz), TtlB:=0, LP := RB ? "Unknown" : CL, %DLP%( True,CL,FN )
Loop {
If ( DllCall( LIB "InternetReadFile", UInt,hIU, UInt,P, UInt,B, UIntP,R ) && !R )
Break
P:=(P+R), TtlB:=(TtlB+R), RemB:=(CL-TtlB), B:=(RemB<B ? RemB : B), %DLP%( TtlB,LP )
Sleep -1
} TtlB<>CL ? VarSetCapacity( T,TtlB ) DllCall( "RtlMoveMemory", Str,T, Str,V, UInt,TtlB )
. VarSetCapacity( V,0 ) . VarSetCapacity( V,TtlB,32 ) . DllCall( "RtlMoveMemory", Str,V
, Str,T, UInt,TtlB ) . %DLP%( TtlB, TtlB ) : N
If ( !DllCall( LIB "InternetCloseHandle", UInt,hIU ) )
+ ( !DllCall( LIB "InternetCloseHandle", UInt,hIO ) )
Return -6
Return, VarSetCapacity(V)+((ErrorLevel:=(RB>0 && TtlB<RB)||(RB=0 && TtlB=CL) ? 0 : 1)<<64)
}
httpquery работает только иногда. Мой совет, используйте встроенный объект WinHttpRequest. Нужна последняя версия AHK. Кроме того, похоже, что вы хотите передать параметры URL, а не публиковать данные.
param := "hello"msgbox, % url_tovar("http://fischgeek.com/playground/dbfree-test/?q=" param)
url_tovar(URL) {
WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
WebRequest.Open("GET", URL)
WebRequest.Send()
res := WebRequest.ResponseText
return res
}
Это также может обрабатывать данные постов. Я должен найти время, чтобы привести пример, если вам интересно.