Что нового

[Сеть, интернет] Загруженый текст с сервера нечитабелен

АлексейБ

Новичок
Сообщения
18
Репутация
0
Подскажите, пожалуйста.
При загрузке страницы, текст не читабельный
пример загруженного текста: ?N??µN??????µ ?·?°??N???N?N? ?? ??????N???N?. ?? N?N????? N??»N?N??°?µ N??µ???????µ????N??µ?? ???°?? ??N????»N?N???N?N? ??N?

Загружаю методом GET


Код:
$link="http://yandex.ru/yandsearch?text=123&lr=213"
					Global $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
					$oHTTP.Open('GET', $link, False)
					$oHTTP.Send('')
					$oHTTP.WaitForResponse
					$text = $oHTTP.ResponseText
					$oHTTP=0

					FileDelete("test.txt")
					$file = FileOpen("test.txt", 1)
					FileWrite($file, $text)
					FileClose($file)


Как загрузить читабельный текст?
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
АлексейБ
Так проще:
Код:
$link="http://yandex.ru/yandsearch?text=123&lr=213"
InetGet($link,'test.html')
 
Автор
А

АлексейБ

Новичок
Сообщения
18
Репутация
0
DarWiM, с первой же попытки, результат капча, страница с текстом примерно такого содержания: Нам очень жаль, но запросы, поступившие с вашего IP-адреса, похожи на автоматические.
По этой причине мы вынуждены временно заблокировать доступ к поиску.</p>
<p>Чтобы продолжить поиск, пожалуйста, введите символы с картинки в поле ввода и нажмите «Отправить».</p> :blink:
А есть еще какой нибудь способ?
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
АлексейБ
Странно, у меня всё в норме.. Никакой капчи
 
Автор
А

АлексейБ

Новичок
Сообщения
18
Репутация
0
DarWiM, на пару минут в цикле оставь данный запрос, и потом при любом другом обращении будет выскакивать капча :smile:.
Есть еще варианты? Может можно замаскировать запрос под браузер Мазилу или Оперу?
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
АлексейБ
Как вариант не ставить в цикле.. Цель какая?
 
Автор
А

АлексейБ

Новичок
Сообщения
18
Репутация
0
Цель автоматизировать поиск по яндексу.
Может можно замаскировать запрос под браузер Мазилу или Оперу?
 

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
Куки добавляй в запрос и будет счастье.
 
Автор
А

АлексейБ

Новичок
Сообщения
18
Репутация
0
Не могу сам разобраться, помогите.
Это всё что смог сделать на прием и передачу куков, и этот код не рабочий

Код:
Global $cookie


Func login()
; Сначала проходим авторизацию
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("POST","http://yandex.ru")
$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
$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("Referer","http://yandex.ru/yandsearch?text=123&lr=213")
$oHTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
$oHTTP.SetRequestHeader("Accept-Encoding", "gzip, deflate")
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0")
$oHTTP.SetRequestHeader("Host","yandex.ru")
$oHTTP.SetRequestHeader("Proxy-Connection", "Keep-alive")
$oHTTP.Send("")
$oHTTP.WaitForResponse

$resp=$oHTTP.ResponseText
;ДОстаем куки
$cookie=StringRegExp($resp,'.*ue=.(.*). />',3)
$cookie='remixsid='&$cookie[4]
;~ ConsoleWrite($cookie&@LF)
;~ _ArrayDisplay($cookie)
EndFunc

Func get()
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("POST", "http://yandex.ru")
$oHTTP.SetRequestHeader("Cookie",$cookie)
$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
$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("Referer","http://yandex.ru/yandsearch?text=123&lr=213")
$oHTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0")
$oHTTP.SetRequestHeader("Host","yandex.ru")
$oHTTP.SetRequestHeader("Proxy-Connection", "Keep-alive")
$oHTTP.Send("")
$oHTTP.WaitForResponse

$resp=$oHTTP.ResponseText
ConsoleWrite($resp&@LF)
EndFunc

login()
get()
 

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
Код:
$resp=$oHTTP.ResponseText
;ДОстаем куки
$cookie=StringRegExp($resp,'.*ue=.(.*). />',3)

Куки содержаться в заголовке
Код:
MsgBox(32,'',$oHTTP.GetResponseheader('set-Cookie'))
MsgBox(32,'',$oHTTP.GetallResponseheaders)
 
Автор
А

АлексейБ

Новичок
Сообщения
18
Репутация
0
Задача разрешилась частично, после непродолжительного тестирования опять текст стал нечитабельным. Может я не те куки отправляю на сервер. Какие куки передавать серверу?
Спасибо, sngr. :ok:

Код:
Global $CookieSC
Global $cookie


$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("POST","http://yandex.ru")
$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
$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("Referer","http://yandex.ru/")
$oHTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
$oHTTP.SetRequestHeader("Accept-Encoding", "gzip, deflate")
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0")
$oHTTP.SetRequestHeader("Host","yandex.ru")
$oHTTP.SetRequestHeader("Proxy-Connection", "Keep-alive")
$oHTTP.Send("")
$oHTTP.WaitForResponse


MsgBox(32,'',$oHTTP.GetResponseheader('Set-Cookie'))
MsgBox(32,'',$oHTTP.GetallResponseheaders)
$CookieSC = $oHTTP.GetResponseheader('Set-Cookie')
;MsgBox(32,'', $CookieSC)
$cookie = $oHTTP.GetallResponseheaders

While 1
$oRequest = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oRequest.Open('GET', 'http://yandex.ru/', 0) ;Создаём соеденение, указываем адрес страницы вместе с параметрами
$oRequest.SetRequestHeader("Cookie",$CookieSC)
$oRequest.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0")
$oRequest.Send() ;отправляем запрос
$sData = $oRequest.ResponseText

;MsgBox(0, 'Data', $sData)

MsgBox(32,'',$oRequest.GetResponseheader('Set-Cookie'))
MsgBox(32,'',$oRequest.GetallResponseheaders)

$CookieSC = $oHTTP.GetResponseheader('Set-Cookie')
;MsgBox(32,'', $CookieSC)
$cookie = $oHTTP.GetallResponseheaders

Sleep(100)


WEnd
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
АлексейБ
Яндекс отправляет данные в кодировке utf-8. Значит файл вам нужно создавать именно в этой кодировке.
 
Автор
А

АлексейБ

Новичок
Сообщения
18
Репутация
0
Какие куки передавать серверу, что бы принимаемый текст от сервера был читабельный?
Нет никакого файла, действие происходит в массивах и переменных. Как для переменных задать кодировку?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
АлексейБ [?]
Нет никакого файла
Из вашего первого сообщения.
Как для переменных задать кодировку?
нельзя задать.
Наверняка есть метод для объекта WinHttp.WinHttpRequest.5.1 для указания кодировки ответа.
У меня кстати, код из первого вашего сообщения, в консоль выводиться в читаемом виде.
 
Автор
А

АлексейБ

Новичок
Сообщения
18
Репутация
0
inververs, что сообщение читабельно, запусти его в цикле на пару минут и то же будет не читабельно.
Записал нечитабельный текст от сервера в файл UTF8, вместо вопросительных знаков появились вот какие символы:
вашем браузере установлены дополнения, которые
sngr ответил, что нужно куки добавлять в запрос. Добавил и не вышло. Может не так добавил или не те куки?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
$link="http://yandex.ru/yandsearch?text=123&lr=213"
                    Global $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
                    $oHTTP.Open('GET', $link, False)
                    $oHTTP.Send('')
                    $oHTTP.WaitForResponse
                    $text = $oHTTP.ResponseText
                    $oHTTP=0

	$file = FileOpen("test.html", 2+128)
                    FileWrite($file, $text)
                    FileClose($file)

не проверял в цикле, но вот так отображается без каракуль.
 
Автор
А

АлексейБ

Новичок
Сообщения
18
Репутация
0
Проверь пожалуйста в цикле на пару минут.

Код:
$d=0
While $d<10000

$link="http://yandex.ru/yandsearch?text=123&lr=213"
                    Global $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
                    $oHTTP.Open('GET', $link, False)
                    $oHTTP.Send('')
                    $oHTTP.WaitForResponse
                    $text = $oHTTP.ResponseText
                    $oHTTP=0

    $file = FileOpen("test.html", 2+128)
                    FileWrite($file, $text)
                    FileClose($file)
$d = $d +1
Wend


У меня каракули приходят. :blink:
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
АлексейБ
Может такое чудо подойдет, если не получится по экспериментируйте с параметрами...
Код:
TCPStartup()
;http://yandex.ru/yandsearch?text=123&lr=213

Global $sRequest = 'GET /yandsearch?text=123&lr=213 HTTP/1.1'& @CRLF
$sRequest &= 'Accept: */*'& @CRLF
;$sRequest &= 'Referer: Site.com'& @CRLF С какого сайта вы пришли...
$sRequest &= 'Accept-Language: ru'& @CRLF
$sRequest &= 'User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; MRA 5.10 (build 5309); .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; .NET4.0C; .NET4.0E; COOEE)'& @CRLF
;$sRequest &= 'Accept-Encoding: gzip, deflate'& @CRLF ; Отключаем кодировку.
$sRequest &= 'Host: yandex.ru'& @CRLF
$sRequest &= 'Connection: Keep-Alive'& @CRLF & @CRLF

Global $sIP = TCPNameToIP('yandex.ru')
Global $iSocket = TCPConnect($sIP, 80)
TCPSend($iSocket, $sRequest)
Global $sData = '', $iTimer = TimerInit()
Do
    $sBuffer = TCPRecv($iSocket, 1024)
    $iError = @error
    If Not $sBuffer = '' Then
        $sData &= $sBuffer
        $iTimer = TimerInit()
    EndIf
Until $iError <> 0 OR TimerDiff($iTimer) > 2000

ConsoleWrite($sData&@CR)
 
Автор
А

АлексейБ

Новичок
Сообщения
18
Репутация
0
Ganibal95, твой код работает, но при одиночном запуске. Если его поместить в цикл на пару минут он перестанет работать. и будет получать данные с сервера типа:
HTTP/1.1 302 Found
Location: http://yandex.ru/showcaptcha?retpath=htt........
Set-Cookie: spravka=dD0xMzI2MTA2MTY2O2k9MjEyLjE1Mi.......
Пробовал прикрепить куки к запросу в коде приведенном ниже, только из этого ничего не вышло, после получения и отправки куков на сервер, приходит то же самое сообщение от сервера, может не правильно куки отправляю или не ту их часть, что нужно?

Код:
#include <Array.au3>


TCPStartup()
;http://yandex.ru/yandsearch?text=123&lr=213

Global $sRequest = 'GET /yandsearch?text=123&lr=213 HTTP/1.1'& @CRLF
$sRequest &= 'Accept: */*'& @CRLF
;$sRequest &= 'Referer: Site.com'& @CRLF С какого сайта вы пришли...
$sRequest &= 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3'& @CRLF
$sRequest &= 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0'& @CRLF
;$sRequest &= 'Accept-Encoding: gzip, deflate'& @CRLF ; Отключаем кодировку.
$sRequest &= 'Host: yandex.ru'& @CRLF
$sRequest &= 'Connection: Keep-Alive'& @CRLF & @CRLF



Global $sIP = TCPNameToIP('yandex.ru')
Global $iSocket = TCPConnect($sIP, 80)
TCPSend($iSocket, $sRequest)
Global $sData = '', $iTimer = TimerInit()
Do
    $sBuffer = TCPRecv($iSocket, 1024)
    $iError = @error
    If Not $sBuffer = '' Then
        $sData &= $sBuffer
        $iTimer = TimerInit()
    EndIf
Until $iError <> 0 OR TimerDiff($iTimer) > 2000

ConsoleWrite($sData&@CR)

;
$sData= @LF & $sData & @CR

					FileDelete("test.txt")
					$file = FileOpen("test.txt", 2+128)
					FileWrite($file, $sData)
					FileClose($file)


MsgBox(0, 'Полученные данные от сервера', $sData)

$Do = StringRegExp($sData, '\n(.*?)\r', 3)
;_ArrayDisplay($Do)
MsgBox(0, 'Куки отправляемые серверу', $Do[2])

;$cookies = StringRegExp($sData, '((?si)PHPSESSID=.*?);', 1)
;$buy= StringRegExp($sData, '((?si).wb=\d+.*?).>', 1)

Sleep(1000)
; MsgBox(0, '', $cookies)
;MsgBox(0, '', $buy)

Global $sRequest = 'GET /yandsearch?text=123&lr=213 HTTP/1.1'& @CRLF
$sRequest &= 'Cookie: '&$Do[2]&''& @CRLF
$sRequest &= 'Accept: */*'& @CRLF
;$sRequest &= 'Referer: Site.com'& @CRLF С какого сайта вы пришли...
$sRequest &= 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3'& @CRLF
$sRequest &= 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0'& @CRLF
;$sRequest &= 'Accept-Encoding: gzip, deflate'& @CRLF ; Отключаем кодировку.
$sRequest &= 'Host: yandex.ru'& @CRLF
$sRequest &= 'Connection: Keep-Alive'& @CRLF & @CRLF

Global $sIP = TCPNameToIP('yandex.ru')
Global $iSocket = TCPConnect($sIP, 80)
TCPSend($iSocket, $sRequest)
Global $sData = '', $iTimer = TimerInit()
Do
    $sBuffer = TCPRecv($iSocket, 1024)
    $iError = @error
    If Not $sBuffer = '' Then
        $sData &= $sBuffer
        $iTimer = TimerInit()
    EndIf
Until $iError <> 0 OR TimerDiff($iTimer) > 2000




					FileDelete("test.txt")
					$file = FileOpen("test.txt", 2+128)
					FileWrite($file, $sData)
					FileClose($file)
MsgBox(0, 'Полученные данные от сервера', $sData)



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

Если подсоединяться средствами WinHttp, вместо куков приходит только одна надпись:
Content-Legth: четырехзначное число(каждый раз новое)
После многочисленных обращений, яндекс перестал присылать куки
Помогите пожалуйста, как правильно обратиться вместе с куками к яндексу, что бы читабельный текст пришел?
 
Автор
А

АлексейБ

Новичок
Сообщения
18
Репутация
0
Прав был sngr, при добавлении куков, проблема разрешилась.
Проблема была в том, что отправлял не формированные куки. Куки нужно формировать на подобии как делает это браузер. :laugh:
 
Верх