max_mara
@max_mara

PHP Socket Proxy Server?

Добрый день коллеги,



в целях саморазвития пытаюсь разобраться с сокетами



В общем открываю сокет, соединяю его с сервером, отправляю туда следующие заголовки

GET <a href="http://www.google.com/">www.google.com/</a> HTTP/1.1<br/>
Host: <a href="http://www.google.com">www.google.com</a><br/>
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1<br/>
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8<br/>
Accept-Language: en-us,en;q=0.5<br/>
Accept-Encoding: gzip, deflate<br/>
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br/>
Proxy-Connection: keep-alive<br/>
Cache-Control: max-age=0<br/>




получаю в ответ

HTTP/1.1 200 OK<br/>
Date: Tue, 18 Oct 2011 02:01:58 GMT<br/>
Expires: -1<br/>
Cache-Control: private, max-age=0<br/>
Content-Type: text/html; charset=UTF-8<br/>
Content-Encoding: gzip<br/>
Server: gws<br/>
Content-Length: 15101<br/>
X-XSS-Protection: 1; mode=block<br/>
X-Frame-Options: SAMEORIGIN<br/>




Т.е. получаю заголовки, но не получаю содержимое страницы.

Делаю это так:

socket_write($this-&gt;_socket, $data, strlen($data));<br/>
return socket_read($this-&gt;_socket, 1024 * 1024);<br/>


$data — Это заголовки.



Где я ошибся?
  • Вопрос задан
  • 4011 просмотров
Решения вопроса 1
Kindman
@Kindman
Попробуйте повторять попытки socket_read() до тех пор пока сокет не закроется.
то есть не сразу делайте RETURN а сперва конкатенацию фрагментов.
Просто серверы иногда делают задержки между генерацией заголовка и отправкой результата. Просто не нужно торопиться!
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Всё пучком, может сам вывод как-то не так делаете?
Ответ написан
@Kaydannik
Ошибка в протоколе
GET www.google.com/ HTTP/1.1 — неправильно.
Правильно — GET / HTTP/1.1
Тут указывается запрос без хоста.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы