Что нового

[Сеть, интернет] Time-out ожидания ответа по запросу InetGet

Pavel

Новичок
Сообщения
125
Репутация
3
Доброго времени суток!
Встала такая проблема: имеет место быть скрипт автоматического получения прайс-листа с сервера из https-зоны. Дело в том, что сам прайс генерируется сервером в момент запроса и это занимает время. До недавнего времени всё работало прекрасно, но потом скрипт перестал качать прайс. Чисто эмпирическим путём выяснил, что проблема заключается в увеличившимся времени генерации прайса: теперь отклик от сервера составляет >30 секунд. Как можно увеличить время ожидания InetGet'ом ответа от сервера?
 

Fever

Скриптер
Сообщения
308
Репутация
112
Код:
Local $Time = 30*1000

$Timer = TimerInit()
Do
	$sData = InetGet("http://site.ru/file.txt")
Until ($sData <> "") Or (TimerDiff($Timer) > $Time)
 
Автор
P

Pavel

Новичок
Сообщения
125
Репутация
3
Fever, мне кажется, что мы не до конца друг друга поняли.
Проблема заключается в том, что сервер шлёт ответ БОЛЕЕ, чем через 30 секунд. А InetGet ждёт ответ до 30 секунд, а дальше рвёт связь, мол "сервер недоступен" (т.е. выходит тайм-аут). Т.е. мне нужно не уменьшить, а увеличить время ожидания функции InetGet ответа от сервера.
 

Fever

Скриптер
Сообщения
308
Репутация
112
Pavel
ага, теперь задача ясна.
Возможно, сначала нужно просто послать https запрос и ждать ответа от сервера, а когда он будет дан, использовать InetGet :-\

может вы покажете, что это, собственно, за сервер?
 
Автор
P

Pavel

Новичок
Сообщения
125
Репутация
3
Fever, увы, не могу. Скажем так - сервер для дилеров одной крупной компании по поставке техники.
Запрос выглядет примерно так:
Код:
Local $sUrl = https://dealer.company.ru/quickpricem.xls.php?UserName=' & $UserName & '&UserPassword=' & $UserPassword

Local $hDownload = InetGet($sUrl, @ScriptDir & '\price\price.xls', 1+2, 1)
	Do
		Sleep(250)
	Until InetGetInfo($hDownload, 2)
	Local $TimeEnd = @MIN & ':' & @SEC
	Local $aData = InetGetInfo($hDownload)
	InetClose($hDownload)
	MsgBox(0, 'START:' & $TimeStart & '; END: ' & $TimeEnd, 'Bytes read: ' & $aData[0] & @CRLF & _
			'Size: ' & $aData[1] & @CRLF & _
			'Complete?: ' & $aData[2] & @CRLF & _
			'Successful?: ' & $aData[3] & @CRLF & _
			'@error: ' & $aData[4] & @CRLF & _
			'@extended: ' & $aData[5] & @CRLF)



Вообще, скрипт переодически работает, периодически вываливает в $aData[4] значение 13. Где можно посмотреть коды ошибок? :smile:
 
Автор
P

Pavel

Новичок
Сообщения
125
Репутация
3
Ну что, не найдётся знающих господ? :(
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Pavel
Попробуйте такой вариант
Код:
#include "WinHttp.au3"

Dim $sUserName = "UserName"
Dim $sPassword = "Password"
Dim $sDomain = "dealer.company.ru"
Dim $sPage = "quickpricem.xls.php"

$sData = "UserName=" & $UserName & "&UserPassword=" & $UserPassword
$hOpen = _WinHttpOpen()
_WinHttpSetTimeouts($hOpen, 0, 60000, 30000, 60000)
$hConnect = _WinHttpConnect($hOpen, $sDomain)
$sReturned = _WinHttpSimpleSSLRequest($hConnect, "GET", $sPage, Default, $sData)

_WinHttpCloseHandle($hConnect)
_WinHttpCloseHandle($hOpen)

ConsoleWrite($sReturned & @CRLF) ; тело XML документа


WinHTTP.au3
 
Автор
P

Pavel

Новичок
Сообщения
125
Репутация
3
Garrett [?]
Pavel
Попробуйте такой вариант
Код: AutoIt [Выделить]
#include "WinHttp.au3"
Dim $sUserName = "UserName"
Dim $sPassword = "Password"
Dim $sDomain = "dealer.company.ru"
Dim $sPage = "quickpricem.xls.php"
$sData = "UserName=" & $UserName & "&UserPassword=" & $UserPassword
$hOpen = _WinHttpOpen()
_WinHttpSetTimeouts($hOpen, 0, 60000, 30000, 60000)
$hConnect = _WinHttpConnect($hOpen, $sDomain)
$sReturned = _WinHttpSimpleSSLRequest($hConnect, "GET", $sPage, Default, $sData)
_WinHttpCloseHandle($hConnect)
_WinHttpCloseHandle($hOpen)
ConsoleWrite($sReturned & @CRLF) ; тело XML документа
WinHTTP.au3

Говорит в логе работы, что, мол, неверный логин и пароль. Увы.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Pavel [?]
неверный логин и пароль
А вы Login и Password на свои меняли :smile:


Добавлено:
Сообщение автоматически объединено:

Попробуйте ещё заменить метод.
Код:
$sReturned = _WinHttpSimpleSSLRequest($hConnect, "POST", $sPage, Default, $sData)
 
Автор
P

Pavel

Новичок
Сообщения
125
Репутация
3
Garrett [?]
Pavel [?]
Цитата
неверный логин и пароль
А вы Login и Password на свои меняли
smiley.gif

Добавлено: Сегодня в 00:21:36Попробуйте ещё заменить метод.
Код: AutoIt [Выделить]
$sReturned = _WinHttpSimpleSSLRequest($hConnect, "POST", $sPage, Default, $sData)
Разумеется, изменил и несколько раз всё перепроверил. Проблема не в этом. Насколько я понимаю в том, что сервер генерирует прайс именно по прямому скрипту, без "промежуточного" соединения. Хотя могу ошибаться в силу своего незнания.



Добавлено:
Сообщение автоматически объединено:

Изменение метода соединения результата не принесло.
 
Верх