mef-t
Осваивающий
- Сообщения
- 306
- Репутация
- 30
Добрый день.
Ниже составлен запрос код
Пользуюсь проксей, по этому вначале переключите параметр "$proxyUse" на "false".
Запрос возвращает:
В то время как ответ через браузер выглядит так:
Просьба помочь разобраться, по какой причине я получаю "HTTP/1.1 400 Bad Request"
Возможно, где-то что-то упустил. Но найти не могу.
P.S. пробовал отправлять запрос и без куки, и с разными вариациями, результат одинаков. Предполагаю, что в самом запросе что-то не так.
Ниже составлен запрос код
Код:
global $proxyUse = True
$proxy = "10.16.4.80" ; прокси
$proxy_port = 3128 ; прокси-порт
$sDomain = 'cars.auto.ru' ;домен или ip-адрес
$iPort = 80 ;порт
$path = "/list/?category_id=15§ion_id=1&subscribe_id=&filter_id=&mark_id=-2&year%5B1%5D=&year%5B2%5D=&color_id=&price_usd%5B1%5D=1000000&price_usd%5B2%5D=¤cy_key=RUR&body_key=&run%5B1%5D=&run%5B2%5D=&engine_key=0&engine_volume%5B1%5D=&engine_volume%5B2%5D=&drive_key=&engine_power%5B1%5D=&engine_power%5B2%5D=&transmission_key=0&used_key=&wheel_key=&custom_key=1&available_key=&change_key=&owner_pts=&stime=30&country_id=1&has_photo=1®ion=0®ion_id=14&sort_by=2&city_id=&output_format=1&client_id=0&extras%5B1%5D=0&extras%5B2%5D=0&extras%5B3%5D=0&extras%5B4%5D=0&extras%5B5%5D=0&extras%5B6%5D=0&extras%5B7%5D=&extras%5B8%5D=0&extras%5B9%5D=0&extras%5B10%5D=0&extras%5B11%5D=0&extras%5B12%5D=&extras%5B13%5D=0&extras%5B14%5D=0&extras%5B15%5D=0&extras%5B16%5D=0&extras%5B17%5D=0&extras%5B18%5D=&extras%5B19%5D=&extras%5B20%5D=&extras%5B21%5D=&extras%5B22%5D=&extras%5B23%5D=0&extras%5B24%5D=0&extras%5B25%5D=&extras%5B26%5D=&extras%5B27%5D=0&extras%5B28%5D=0&extras%5B29%5D=&submit=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8&_p=" ; URL страницы, без домена и с слешем в начале
$agent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0" ; User-Agent
;~ $agent = "mef-t" ; User-Agent
;Запрос, который будет отправлен серверу
$sRequest = 'GET ' & $path & 'HTTP/1.1' & @CRLF ;Request-строка, параметры GET-запроса
$srequest &= "Host: " & $sDomain & @CRLF
$sRequest &= 'User-Agent: ' & $agent & '' & @CRLF
$srequest &= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" & @CRLF
$srequest &= "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3" & @CRLF
$srequest &= "Accept-Encoding: gzip, deflate" & @CRLF
$srequest &= "Cookie: UTGv2=h4f11f0accc1701637b60bf313060be97562; chcookie=1; autoru_sid=e8bce39ef952ab32_21301c7a0c7be72d8a6cdd13e5b49cc7; autoru_track=%7B%7D; __utma=1.406209656.1375869267.1376029661.1376294037.6; __utmz=1.1375869267.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); neova_resolution=1680x1050; currency_key=RUR; SPSI=3bce92bf5769d897d78573a98fd342ff; PRLST=Gp; __utmb=1.1.10.1376294037; __utmc=1; adOtr=9TbO3" & @CRLF
$srequest &= "Cache-Control: max-age=0" & @CRLF
$sRequest &= 'Connection: keep-alive' & @CRLF & @CRLF ;Заголовки
If TCPStartup() = 0 Then ;запускаем TCP/UDP-службы
MsgBox(16, 'Ошибка', 'Не удалось запустить TCP/UDP-службы.')
Exit 1
EndIf
If $proxyUse Then
$iSocket = TCPConnect($proxy, $proxy_port) ;соединяемся с сервером
Else
$sIP = TCPNameToIP($sDomain) ;получаем ip-адрес
If @error Then
MsgBox(16, 'Ошибка', 'Не удалось получить ip-адрес сервера.')
Exit 2
EndIf
$iSocket = TCPConnect($sIP, $iPort) ;соединяемся с сервером
EndIf
If @error Then
MsgBox(16, 'Ошибка', 'Не удалось соедениться с сервером.')
Exit 3
EndIf
TCPSend($iSocket, $sRequest) ;отправляем сообщение
If @error Then
MsgBox(16, 'Ошибка', 'Не удалось отправить запрос.')
Exit 4
EndIf
$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) > 3000 ;если при получении сообщения произошла ошибка (данные получены, соединение закрыто) или в течении 5 секунд ничего не было получено, выход из цикла
TCPCloseSocket($iSocket)
TCPShutdown()
$aData = StringRegExp($sData, '(?s)(.*?)\r\n\r\n(.*)', 3) ;отделяем http-заголовки от тела сообщения ('заголовки' & @CRLF & @CRLF & 'тело')
If @error Then
MsgBox(16, 'Ошибка', 'Полученные данные неверны.')
Exit 5
EndIf
;~ MsgBox(0, 'Data', $aData[0])
;~ MsgBox(0, 'Data', $sData)
$hFile = FileOpen('Parser.txt', 2)
FileWrite($hFile, $sData)
FileClose($hFile)
Пользуюсь проксей, по этому вначале переключите параметр "$proxyUse" на "false".
Запрос возвращает:
HTTP/1.1 400 Bad Request
Server: squid/x.x.xx
Mime-Version: 1.0
Date: Mon, 12 Aug 2013 12:09:14 GMT
Content-Type: text/html
Content-Length: 3050
X-Squid-Error: ERR_INVALID_URL 0
Vary: Accept-Language
Content-Language: en
X-Cache: MISS from ivn-ad01-proxy2
Via: 1.1 ivn-ad01-proxy2 (squid/x.x.xx)
Connection: close
Server: squid/x.x.xx
Mime-Version: 1.0
Date: Mon, 12 Aug 2013 12:09:14 GMT
Content-Type: text/html
Content-Length: 3050
X-Squid-Error: ERR_INVALID_URL 0
Vary: Accept-Language
Content-Language: en
X-Cache: MISS from ivn-ad01-proxy2
Via: 1.1 ivn-ad01-proxy2 (squid/x.x.xx)
Connection: close
В то время как ответ через браузер выглядит так:
HTTP/1.1 200 OK
Date: Mon, 12 Aug 2013 08:02:09 GMT
Server: nginx/1.2.3
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: chcookie=1; expires=Wednesday, 11-Sep-13 08:02:09 GMT; path=/; domain=.auto.ru
currency_key=RUR; expires=Tuesday, 12-Aug-14 08:02:09 GMT; path=/
cookie_test=1; expires=Friday, 02-Jan-70 00:00:00 GMT; path=/; domain=.auto.ru
SPSI=3bce92bf5769d897d78573a98fd342ff ; path=/; domain=.auto.ru
PRLST= ; expires=Fri, 09 Aug 2013 08:02:09 GMT; path=/; domain=.auto.ru
Content-Encoding: gzip
X-Cache: MISS from ivn-ad01-proxy2
Transfer-Encoding: chunked
Via: 1.1 ivn-ad01-proxy2 (squid/x.x.xx)
Connection: keep-alive
Date: Mon, 12 Aug 2013 08:02:09 GMT
Server: nginx/1.2.3
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: chcookie=1; expires=Wednesday, 11-Sep-13 08:02:09 GMT; path=/; domain=.auto.ru
currency_key=RUR; expires=Tuesday, 12-Aug-14 08:02:09 GMT; path=/
cookie_test=1; expires=Friday, 02-Jan-70 00:00:00 GMT; path=/; domain=.auto.ru
SPSI=3bce92bf5769d897d78573a98fd342ff ; path=/; domain=.auto.ru
PRLST= ; expires=Fri, 09 Aug 2013 08:02:09 GMT; path=/; domain=.auto.ru
Content-Encoding: gzip
X-Cache: MISS from ivn-ad01-proxy2
Transfer-Encoding: chunked
Via: 1.1 ivn-ad01-proxy2 (squid/x.x.xx)
Connection: keep-alive
Просьба помочь разобраться, по какой причине я получаю "HTTP/1.1 400 Bad Request"
Возможно, где-то что-то упустил. Но найти не могу.
P.S. пробовал отправлять запрос и без куки, и с разными вариациями, результат одинаков. Предполагаю, что в самом запросе что-то не так.