C# вебсервер-передатчик HTTP-запросов

Цена договорная
07 сентября 2020, 12:18 • 3 отклика • 53 просмотра
Структура текста заказа:
1. Что за проект нужен
2. Как этим проектом будут пользоваться
3. Необходимо реализовать
4. Примерная схема запросов к вебсерверу и их детали
5. Примеры запросов в insomnia к C#вебсерверу
6. Видимые сложности
7. Сроки и оплата


1 -----------------------------------
Что за проект нужен:
Консольное приложение вебсервер, которое будет использоваться как прослойка между парсером и целевым сайтом.

2 -----------------------------------
Как этим проектом будут пользоваться:
1. некое приложение умеет отправлять запросы своими силами, но некоторые сайты это запрещают именно из-за http агента. (это гипотеза)
2. приложение отправляет запросы на C#-вебсервер с параметрами запроса.
3. C# вебсервер принимает, парсит параметры запроса, устанавливает куку, начинает сессию и отправляет запрос от своего имени.
4. C# вебсервер получает ответ от сайта, обновляет куки, возращает ответ приложению

3 -----------------------------------
Необходимо реализовать:
1. GET/POST/PUT, и прием POST-данных в таких форматах: urlencoded, json, plaintext.
2. функционал сессий, чтобы велась работа с куками
3. поддержка отправки запросов через прокси HTTS|Socks, ip:port и user:pass@ip:port

4 -----------------------------------
Примерная схема запросов к вебсерверу и их детали
Вебсервер, который висит процессом на конкретном порту и принимает запросы на 3 обработчика /createSession , /closeSession , /request
POST /createSession - создает "сессию" с юзерагентом,проксей,куками и идом.
body: {
"user-agent": string // required
"proxy": 'http://ip:port@user:pass' // http | https | socks4 | socks5 нужна поддержка этих типов. ip:port@user:pass или ip:port
}
возвращает id сессии в виде строки
POST /closeSession - закрывает "сессию"
body: {
id: string // идентификатор сессии для ее удаления
}
POST /request - принимает параметры запроса, которые нужно выполнить от своего лица.
body: {
sessionId: "" // идентификатор, который получили от /createSession
method: 'GET' // GET | POST | PUT
url: 'https://2ip.ru/myip', // куда отправлять запрос. путь тоже тут
headers: { // дополнительные заголовки, необходимые для запроса
Accept: '*',
},
body: "" // только при POST|PUT. может быть urlencoded или json строка
}
ответ json
{
code: 200,
headers: {
aa: a2,
bb: b1
},
body: "asdasda"
}

5 -----------------------------------
Примеры запросов в insomnia к C#вебсерверу
// создание сессии
curl --request POST \
--url http://localhost:1234/createSession \
--header 'content-type: application/json' \
--data '{
"user-agent": "xxx",
"proxy": "http://ip:port@user:pass"
}'

// POST запрос с form-urlencoded телом
curl --request POST \
--url http://localhost:1234/request \
--header 'content-type: application/json' \
--data '{
"method": "POST",
"url": "https://2ip.ru/myip",
"headers": {
"Accept": "*"
},
"body": "aa=11&av=21"
}'

// POST запрос с json телом
curl --request POST \
--url http://localhost:1234/request \
--header 'content-type: application/json' \
--data '{
"sessionId": "xxx",
"method": "POST",
"url": "https://2ip.ru/myip",
"headers": {
"Accept": "*"
},
"body": "{\"aa\": 11,\"av\":21}"
}'

// GET
curl --request POST \
--url http://localhost:1234/request \
--header 'content-type: application/json' \
--data '{
"sessionId": "xxx",
"method": "GET",
"url": "https://2ip.ru/myip",
"headers": {
"Accept": "*"
}
}'

вебсервер будет отвечать на POST /request вот так в json:
{
statusCode: 200,
headers: {} // заголовки ответа
body: "" // ответ сайта
}

6 -----------------------------------
Видимые сложности:
1. вебсервер должен обрабатывать запросы параллельно или асинхронно
2. поэтому нужно аккуратно работать с объектом сессий, чтобы не было конфликтов
3. нужно протестировать все типы проксей, потому что их создание специфично в разных языках программирования.
4. нужно использовать такой объект, который будет сам устанавливать куки из ответа сайта, и который позднее можно использовать повторно. Обычно он предусмотрен http библиотеками

7 -----------------------------------
Сроки и оплата
До конца не ясна сложность проекта, поэтому ориентировочно 4 рабочих дня и бюджет от $50
Если вас заинтересовал заказ - поделитесь вашим взглядом на решение, сроки, стоимость.
Файлы