Если я правильно понимаю, вы должны сделать http-запрос к веб-серверу с использованием виртуальных хостов, но DNS еще не настроен, поэтому вам нужно указать IP-адрес в URL, но отправить что-то еще в Host: header.
Если это так, вы можете сделать это ..
В C # с использованием WebProxy:
См. ответ Кайоде Леонарда для .NET 4 и выше.
Вот код, который я хотел бы использовать, если мой сервер работает на 67.223.227.171:8888
, но мне нужно иметь www.example.com
в заголовке Host:
.
System.Net.WebRequest r = System.Net.WebRequest.Create("http://www.example.com");
r.Proxy = new WebProxy("http://67.223.227.171:8888");
См. эту ссылку
В C ++ с использованием WinHttp:
с использованием WinHttpВы можете просто установить заголовок Host:
с помощью WinHttpAddRequestHeaders.
Еще раз, если мой сервер работает на 67.223.227.171:8888
, но мне нужно иметь www.example.com
в заголовке Host:
:
#include <windows.h>
#include <winhttp.h>
#include <assert.h>
int main() {
HINTERNET hSession = WinHttpOpen(L"A WinHTTP Example Program/1.0",
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0);
assert(hSession != NULL);
// Use WinHttpConnect to specify an HTTP server.
HINTERNET hConnect = WinHttpConnect( hSession,
L"67.223.227.171",
8888,
0 );
assert(hConnect != NULL);
// Open and Send a Request Header.
HINTERNET hRequest = WinHttpOpenRequest( hConnect,
L"GET",
L"/downloads/samples/internet/winhttp/retoptions/redirect.asp",
NULL,
WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES,
0 );
assert(hRequest != NULL);
BOOL httpResult = WinHttpAddRequestHeaders(
hRequest,
L"Host: www.example.com",
-1L,
0);
assert(httpResult);
httpResult = WinHttpSendRequest( hRequest,
WINHTTP_NO_ADDITIONAL_HEADERS,
0,
WINHTTP_NO_REQUEST_DATA,
0,
0,
0 );
assert(httpResult);
httpResult = WinHttpReceiveResponse( hRequest, NULL );
assert(httpResult);
}
Отредактировано: Имя класса WebProxy
.Добавлен пример кода C #.Добавлен пример кода C ++.