Что нового

Проблема с "GET" запросом на WINDOWS 7.

beve

Осваивающий
Сообщения
104
Репутация
31
Имеется код:
Код:
_HttpRequest('http://fileplaneta.com')

Func _HttpRequest($sRequestURL, $sSendData="", $sType='GET')
Local $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oHTTP.Open($sType, $sRequestURL)
$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
;~~~~~~~ сдесь возможно проблема~~~~~~~~
$oHTTP.SetRequestHeader('Host', "fileplaneta.com")
;~~~~~~~ конец проблемы~~~~~~~~
$oHTTP.SetRequestHeader("User-Agent", "Opera/9.80 (Windows NT 6.1; U; Edition Next; ru) Presto/2.9.186 Version/12.00")
$oHTTP.SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
$oHTTP.SetRequestHeader("Accept-Language", "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3")
$oHTTP.SetRequestHeader('Connection', 'Keep-alive')
$oHTTP.Send( $sSendData)

$headers = $oHTTP.GetAllResponseHeaders()
ConsoleWrite('headers-> ' & $headers & @CRLF)

$oHTTP.WaitForResponse
ConsoleWrite('Response-> ' & $oHTTP.ResponseText & @CRLF)
EndFunc

Этот код не работает на WINDOWS 7, хотя на WINDOWS XP вроде работает правильно, причина НЕ ПОНЯТНА. В чем может быть проблема?

OS Windows 7.
 
Автор
beve

beve

Осваивающий
Сообщения
104
Репутация
31
Re: Проблема с "Get" запросом при работе ObjCreate('WinHttp.WinHttpRequest.5.1').

Это проблему не решает, но приму к сведению, другие скрипты у меня и так работают.
 

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
Re: Проблема с "Get" запросом при работе ObjCreate('WinHttp.WinHttpRequest.5.1').

Код:
headers-> Server: nginx
Date: Thu, 17 May 2012 17:15:08 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
<font color="red">SetLinks error: Cache dir: Permission denied! </font>
, Incorrect answer from server </font>

Expires: Wed, 16 May 2012 17:15:08 GMT
Content-Encoding: gzip
Это ответ с твоего сервера. Если писать Get то получаем в итоге
Код:
The requested action with this object has failed.:
$oHTTP.Send( $sSendData)
$oHTTP.Send( $sSendData)^ ERROR
 
Автор
beve

beve

Осваивающий
Сообщения
104
Репутация
31
Re: Проблема с "Get" запросом при работе ObjCreate('WinHttp.WinHttpRequest.5.1').

sngr, спасибо за тестирования. По твоему примеру понял, что на Windows XP, работает мой код. В связи с этим, я уточню сейчас в названии темы, что не работает на Windows 7.

И еще одно уточнение. На Windows 7 не имеет значение, если запрос "GET" будет не заглавными буквами, но все же выходит правильно будет писать большими.

P.S. Изменил название темы для понимания проблемы.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
beve
Попробуй работать через DLL, а если не принципиально использовать WinHTTP, то вот код для WinInet

Код:
#include "WinINet.au3"
Global $hOpenRequest, $hInternetConnect, $hInternetOpen
_WinINet_Startup()
Global $User_Agent = "AutoIt/" & @AutoItVersion

$hInternetOpen = _WinINet_InternetOpen($User_Agent)
$hInternetConnect = _WinINet_InternetConnect($hInternetOpen, $INTERNET_SERVICE_HTTP, "fileplaneta.com")
$hOpenRequest = _WinINet_HttpOpenRequest($hInternetConnect, "GET", "/")
$SendRequest = _WinINet_HttpSendRequest($hOpenRequest, Default, Default)

;Получение ответа
Local $readfile = Binary("")
Do
	$readfile &= _WinINet_InternetReadFile($hOpenRequest, 500)
Until @error Or Not @extended
ConsoleWrite(BinaryToString($readfile,4) & @LF)

;Получение всех заголовков
$avLength = _WinINet_HttpQueryInfo($hOpenRequest, $HTTP_QUERY_RAW_HEADERS_CRLF, 0, 4096)
$binary_data = DllStructGetData(DllStructCreate("byte[" & $avLength[1] & "]", DllStructGetPtr($avLength[0])), 1)
$sHeadrsCRLF = BinaryToString($binary_data, 2)
ConsoleWrite("+ Заголовки ответа" & @LF)
ConsoleWrite($sHeadrsCRLF & @LF)

_WinINet_InternetCloseHandle($hOpenRequest)
_WinINet_InternetCloseHandle($hInternetConnect)
_WinINet_InternetCloseHandle($hInternetOpen)
_WinINet_Shutdown()
 

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
Что значит неработает? Выводит ошибки?(где они?) Нет ответа от сервера? Попробуй через родные функции autoit. Поищи на msdn, возможно WinHttp.WinHttpRequest.5.1 - это версия для xp, а у тебя объект другой версии.
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
На новых версиях windows winhttp принудительно посылает заголовок Content-Type, на что fileplanet.com как-то болезненно реагирует.
 
Верх