C# вебсервер-передатчик HTTP-запросов
Цена договорная
Структура текста заказа:
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
Если вас заинтересовал заказ - поделитесь вашим взглядом на решение, сроки, стоимость.
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
Если вас заинтересовал заказ - поделитесь вашим взглядом на решение, сроки, стоимость.
- Файлы
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.