Непонятные- невидимые символы
1.
Андрей (04.07.2011 / 18:05)
<?php
function parseQuery($str){
preg_match('/Host: (.*)\n/i',$str,$matches);
$res['host']=$matches[1];
$host=$matches[1];
preg_match('/:( .*)/i',$res['host'],$matches);
@$res['port']=$matches[1];
preg_match('/GET (.*) /i',$str,$matches);
if(isset($matches[1]) && $matches[1]!=''){
$res['tmpport']=80;
}
preg_match('/POST (.*) /i',$str,$matches);
if(isset($matches[1]) && $matches[1]!=''){
$res['tmpport']=80;
}
preg_match('/CONNECT (.*) /i',$str,$matches);
if(isset($matches[1]) && $matches[1]!=''){
if(!isset($res['port']) || $res['port']==''){
$res['port']=433;
}
}
if(!isset($res['port']) || $res['port']==''){
$res['port']=$res['tmpport'];
}
//$res['host']=preg_replace('/(.*):/i','\1',$res['host']);
preg_match('/[GET|POST|CONNECT] (.*) HTTP/Ui',$str,$url);
return GetUrl(trim($url[1]),'',1);
//return getSite($res['host'],$res['port'],$str);
}
?>
Функции передаются заголовки браузера, после обработки этой функцией, появляются разные non print символы.
Например если не обработать переменную $url[1] функцией trim(),то сокет выдаёт ошибку что адрес не найден, и так со всеми переменными.
Скрипт в utf-8.
Кривость функции на данный момент не важна.
Добавлено через 03:01 сек.
Браузер посылает в загаловках только латиницу, думаю с кодировкой это не связано, скорей всего строки портят регулярки (обрезают лишние байты) модификатор u не помогает.
Добавлено через 06:58 сек.
GetUrl()- запрашивает через curl.
getSite()- через сокеты.
Обеим функциям мешают эти non print символы.
2.
T-S (06.07.2011 / 20:24)
1) Объясни почему ты используешь регулярку?
Почему ты не используешь массив $_SERVER
Дай пример входа $str.
Я так понял там по строкам разбиты заголовки но все же. и зачем ты бросаешь мод i он же не нужен, только увеличивает время выполнения.
далее:
preg_match('/Host: (.*)\n/i',$str,$matches);
\n не обязателен если ты не используешь мод s.
Убери его и оптимизируется код.
Все же просил не придираться к коду но я не удержался извини.
Если ты уверен что проблема не в кодировке тогда не знаю но могу сказать точно что и не в регулярке. а хотя пробелы в регулярках замени на \s (Пустые символы)
Да и мой тебе совет присмотрись к preg_match_all
3.
Андрей (07.07.2011 / 19:23)
2.
T-S, Не использую массив $_SERVER так-как запускается из консоли и биндует порт.
Вот пример заголовков:
GET http://www.google.com/webhp?hl=ru HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 WebMoney Advisor
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
DNT: 1
Proxy-Connection: keep-alive
Referer: http://www.google.com/search?client=ubuntu&channel=fs&q=%D0%B7%D0%B0%D0%B3%D0%B0%D0%BB%D0%BE%D0%B2%D0%BA%D0%B8+%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B0&ie=utf-8&oe=utf-8
Cookie: PREF=ID=d9745f3985c8c5ba:U=102ef765f0eee1b8:FF=0:TM=1309792032:LM=1309793225:S=lsz5yWFvjnmd4N0n; NID=48=UVmwl_WDH93pzMCiw4JEeyuvNdJHNxMHMj19zzk_rNoLoBP708JPIgJVuNcMuEcU8Wbe2lT2vw1aJ2xZgdlTn-mRxGwnnrcyhBxwoIBhAzfl1Cqj1LWwpnKjSZJdXE1N; W6D=v4=0:ds=0:w=167:l=-4439:q=0; SID=DQAAAKAAAABxS8CmBzbaGDmLoi-Tzrz5ZBEDEw68R97P3toeXZ_jF6D62fg-1et25LOLXQKEQPYR9OOOVKRMbVr-C6OVZ_Wuui2PbAF
Из этого мне нужно достать GET (он может быть POST и CONNECT), HOST, изменить браузер и Proxy-Connection: keep-alive на Connection: Close
Proxy-Connection: может и не быть или может быть просто Connection, а строка нужна в любом случае.
Кривость кода порадило многократное переписывание его.
4.
T-S (07.07.2011 / 21:49)
<?php
$str = 'GET http://www.google.com/webhp?hl=ru HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 WebMoney Advisor
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
DNT: 1
Proxy-Connection: keep-alive
Referer: http://www.google.com/search?client=ubuntu&channel=fs&q=%D0%B7%D0%B0%D0%B3%D0%B0%D0%BB%D0%BE%D0%B2%D0%BA%D0%B8+%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B0&ie=utf-8&oe=utf-8
Cookie: PREF=ID=d9745f3985c8c5ba:U=102ef765f0eee1b8:FF=0:TM=1309792032:LM=1309793225:S=lsz5yWFvjnmd4N0n; NID=48=UVmwl_WDH93pzMCiw4JEeyuvNdJHNxMHMj19zzk_rNoLoBP708JPIgJVuNcMuEcU8Wbe2lT2vw1aJ2xZgdlTn-mRxGwnnrcyhBxwoIBhAzfl1Cqj1LWwpnKjSZJdXE1N; W6D=v4=0:ds=0:w=167:l=-4439:q=0; SID=DQAAAKAAAABxS8CmBzbaGDmLoi-Tzrz5ZBEDEw68R97P3toeXZ_jF6D62fg-1et25LOLXQKEQPYR9OOOVKRMbVr-C6OVZ_Wuui2PbAF';
//Что если попробовать так.
$h = explode("\n", $str);
$h[0] = explode(' ', $h[0]);
$c = count($h);
$header = array();
for ($i = 1; $i<$c; $i++) {
$h[$i] = explode(': ', $h[$i]);
$key = $h[$i][0];
$val = $h[$i][1];
$header[$key] = trim($val);
}
echo 'Метод: ' . $h[0][0] . ' = ' .$h[0][1] . "\n"; // POST/GET
var_dump($header);
5.
T-S (07.07.2011 / 21:52)
Результат:
Метод: GET = http://www.google.com/webhp?hl=ru
array(10) {
["Host"]=>
string(14) "www.google.com"
["User-Agent"]=>
string(85) "Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 WebMoney Advisor"
["Accept"]=>
string(63) "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
["Accept-Language"]=>
string(35) "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3"
["Accept-Encoding"]=>
string(13) "gzip, deflate"
["Accept-Charset"]=>
string(32) "windows-1251,utf-8;q=0.7,*;q=0.7"
["DNT"]=>
string(1) "1"
["Proxy-Connection"]=>
string(10) "keep-alive"
["Referer"]=>
string(177) "http://www.google.com/search?client=ubuntu&channel=fs&q=%D0%B7%D0%B0%D0%B3%D0%B0%D0%BB%D0%BE%D0%B2%D0%BA%D0%B8+%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B0&ie=utf-8&oe=utf-8"
["Cookie"]=>
string(374) "PREF=ID=d9745f3985c8c5ba:U=102ef765f0eee1b8:FF=0:TM=1309792032:LM=1309793225:S=lsz5yWFvjnmd4N0n; NID=48=UVmwl_WDH93pzMCiw4JEeyuvNdJHNxMHMj19zzk_rNoLoBP708JPIgJVuNcMuEcU8Wbe2lT2vw1aJ2xZgdlTn-mRxGwnnrcyhBxwoIBhAzfl1Cqj1LWwpnKjSZJdXE1N; W6D=v4=0:ds=0:w=167:l=-4439:q=0; SID=DQAAAKAAAABxS8CmBzbaGDmLoi-Tzrz5ZBEDEw68R97P3toeXZ_jF6D62fg-1et25LOLXQKEQPYR9OOOVKRMbVr-C6OVZ_Wuui2PbAF"
}
URL:
https://visavi.net/topics/22943