Сокеты C, запросы на получение прокси-сервера, возвращающиеся как 404

#c #sockets #proxy

#c #сокеты #прокси

Вопрос:

Я создаю простой прокси-сервер и столкнулся с проблемой получения ответов с веб-сайта.

Я настроил свой сервер на прием подключений к указанному порту, к которому подключается через конфигурацию прокси-сервера браузера. Сервер может получить запрос, подключиться к указанному веб-сайту, отправить запрос и получить ответ.

Я перенаправляю запрос из браузера на веб-сайт без изменений, но ответы, которые я получаю, всегда содержат ошибки 404.

Это запрос, который я отправляю на веб-сайт, после каждой строки есть r n и r n r n после последней строки.

 GET http://www.mywebpage.com/ HTTP/1.1
Host: www.mywebpage.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: __utma=1.35811746.1525489860.1537250282.1539467023.3; __utmz=1.1537250282.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not provided); _fbp=fb.1.1553849756364.1600689742
Upgrade-Insecure-Requests: 1
  

Мой код отправки получения выглядит следующим образом.

 sendError  = send(serverSock, requestString , strlen(requestString) , 0 );  
returnedSize = recv(serverSock, buffer, sizeof(buffer), 0);
  

Ответ №1:

Я перенаправляю запрос из браузера на веб-сайт без изменений…

 GET http://www.mywebpage.com/ HTTP/1.1
  

Абсолютный URL, который вы используете в своем целевом запросе, следует использовать только для прокси. Обычные серверы ожидают исходную форму, то есть только путь и необязательный запрос, но не полный URL. Таким образом, метод, хост и порт должны быть удалены:

  GET / HTTP/1.1