Try this:
#include "WinHTTP.au3"
$LocalIP = "192.168.3.1"
$hw_open = _WinHttpOpen()
$hw_connect = _WinHttpConnect($hw_open, $LocalIP)
$h_openRequest = _WinHttpOpenRequest($hw_connect, "POST", "restart.cgi")
_WinHttpSetCredentials($h_openRequest, $WINHTTP_AUTH_TARGET_SERVER, $WINHTTP_AUTH_SCHEME_BASIC, "admin", "admin")
_WinHttpSendRequest($h_openRequest)
_WinHttpWriteData($h_openRequest, "restart=Restart?")
_WinHttpReceiveResponse($h_openRequest)
_WinHttpCloseHandle($h_openRequest)
_WinHttpCloseHandle($hw_connect)
_WinHttpCloseHandle($hw_open)
Func _WinHttpWriteData($hRequest, $string)
Local $dwNumberOfBytesToWrite = StringLen($string)
Local $a_iCall = DllCall("Winhttp.dll", "int", "WinHttpWriteData", _
"hwnd", $hRequest, _
"str", $string, _
"dword", $dwNumberOfBytesToWrite, _
"ptr", 0)
If @error Or Not $a_iCall[0] Then
Return SetError(1, 0, -1)
EndIf
Return SetError(0, 0, $a_iCall[0])
EndFunc ;==>_WinHttpWriteData
That script have _WinHttpWriteData() that is not in WinHTTP.au3 (I wasn't sure about "str" or "wstr" in dll call).