webForumDet fria alternativet

Ange host header vid http request

19 svar · 1 548 visningar · startad av Erik Juhlin

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#1

Hej,
Jag vill kunna göra ett anrop till en url på ett ip-nummer med en viss host header.
HttpWebRequest verkar inte stödja detta. När jag skriver:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://127.0.0.1/");
request.Headers.Add("Host", "www.foo.com");
...

så får jag meddelandet: "The 'Host' header cannot be modified directly."

Finns det något sätt man kan göra detta på?

PMedlem sedan jan. 20012 204 inlägg
#2

Det finns nog en speciell egenskap för host.
Testa

 request.Host = "www.foo.se";
Erik JuhlinMedlem sedan maj 200010 687 inlägg
#3

Nej. :(

freguzMedlem sedan feb. 2005280 inlägg
#4

Nu är jag inte alls nåt Reuqest/DNS/IP geni, men jag bara reagerar på att anropa både med ett IP och en DNS, i mina öron kan man bara göra det ena eller andra :bire (men lär mig gärna hur det ska vara alltså)

Jag hade tänkt såhär: ok, jag ska anropa med foo.com, så att jag i IIS kan sätta host headers till foo.com och greppa tag i det reuqestet där. Well, då får jag se till att sätta i min host-fil på datorn en egen DNS pek som är 127.0.0.1 foo.com helt enkelt, så lär det ju funka :)

GladhMedlem sedan maj 20012 812 inlägg
#5

Erik skrev:

Jag vill kunna göra ett anrop till en url på ett ip-nummer med en viss host header.
HttpWebRequest verkar inte stödja detta. När jag skriver:

Varför vill du göra så? Är det att du har någon test miljö på en ip-adress där du har lagt upp en site med en host-header som finns på en annan ip-adress i "verkligheten".

Om det är det så hade jag nog gjort som frequz föreslagit, gå in och ändra i host-filen.

Om det inte är det som du är ute efter, så ser jag ingen anledning att använda IP-adressen, eftersom dns-namnet kommer att räcka för att komma rätt.

- M

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#6

Jag vill kunna anropa flera maskiner i ett kluster som externt står bakom samma ip-adress. Kan alltså bara anropa på ett internt ip för att komma åt specifik maskin.
Men behöver kunna ange host header för att komma åt en viss site.

Nån DNS är jag inte intresserad av. Vill göra ett anrop till ett visst ip och samtidigt ange headern "Host". Borde ju vara som vilken header som helst. Men HttpWebRequest lägger sig i... :l

freguzMedlem sedan feb. 2005280 inlägg
#7

Men IP + olika portar eller virtual directories, skulle inte det funka? Hur dirigerar man trafiken i klustret?(ej van med klustermiljöer)

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#8

Jag har inte helt 100 koll på det heller. Men trafiken ska dirigeras beroende på belastningen på de olika servrarna.

När jag skrev...
"Finns det något sätt man kan göra detta på?"
...så menade jag inte att jag vill göra något annat än att sätta Host headern. Jag menade andra sätt att sätta headern Host på. T.ex. om det finns något annat smidigt sätt att göra http request. Skulle ju kunna plocka fram källkoden till HttpWebRequest och se hur den gör. Men borde gå o göra enklare.

GladhMedlem sedan maj 20012 812 inlägg
#9

Erik skrev:

Nån DNS är jag inte intresserad av. Vill göra ett anrop till ett visst ip och samtidigt ange headern "Host". Borde ju vara som vilken header som helst. Men HttpWebRequest lägger

Eftersom det du vill åstakomma är något tillfälligt, typ i en test miljö, så tycker jag att den enklast vägen är helt enkelt att du pekar om https://www.foo.com i din host-fil att peka på den bakomliggande serverns ip-address istället för på själva "kluster servern's ipadress".

- M

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#10

Jag kommer behöva anropa flera maskiner i klustret. Så då skulle jag behöva innan varje anrop gå in och ändra i hosts filen. Inte så smidigt.
Och jag har inte sagt att det är något tillfälligt eller en test miljö jag vill göra det i.

CatZMedlem sedan jan. 20022 440 inlägg
#11

Du skulle kunna anropa ett vbs script från C# som sköter det åt dig...

HermanMedlem sedan maj 2001431 inlägg
#12

Erik Juhlin skrev:

Jag vill kunna göra ett anrop till en url på ett ip-nummer med en viss host header.
HttpWebRequest verkar inte stödja detta. När jag skriver:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://127.0.0.1/");
request.Headers.Add("Host", "www.foo.com");
...

så får jag meddelandet: "The 'Host' header cannot be modified directly."

Finns det något sätt man kan göra detta på?

Minns att jag hade nått liknande problem. Numera använder jag nedanstående i min webbproxy/sidladdare. Du kan ju testa om det hjälper dig.

WebHeaderCollection whc = new WebHeaderCollection();
whc.Add("Host", "www.foo.com");
request.Headers = whc
CatZMedlem sedan jan. 20022 440 inlägg
#13

Jag tror till och med att du kan göra

request.Headers.add(whc);
Erik JuhlinMedlem sedan maj 200010 687 inlägg
#14

Herman skrev:

Minns att jag hade nått liknande problem. Numera använder jag nedanstående i min webbproxy/sidladdare. Du kan ju testa om det hjälper dig.

WebHeaderCollection whc = new WebHeaderCollection();
whc.Add("Host", "www.foo.com");
request.Headers = whc

Får fortfarande samma fel... :(

emissionMedlem sedan dec. 19996 721 inlägg
#15

Har du provat WebProxy-knepet?

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1815870&SiteID=1

HermanMedlem sedan maj 2001431 inlägg
#16

Erik Juhlin skrev:

Får fortfarande samma fel... :(

Jag typar iofs inte om till HttpWebRequest. Kanske det gör nån skillnad?

WebRequest request  = WebRequest.Create(url);
tydalMedlem sedan juni 20034 013 inlägg
#17

Använder du HttpWebRequest till något särskilt sen? Http är ju inte så avancerat. Allt du gör ju är att skicka:

GET /sidans-adress.html HTTP/1.1
Host: den-du-vill-ha.com
(tomrad)

Och sen sparar du ju allt som kommer. Behöver du dela upp header och body så är det första tomraden du kommer till som utgör gränsen.

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#18

Herman: Nej ville inte funka.

tydal: Nej inget avancerat. Och http kan jag ganska hyfsat. Men vill slippa allt meck runt omkring.

emission: Tack! Det där funka ju bra! Ser t.o.m. ut som att jag kan använda det tillsammans med WebServices vilket jag tidigare trott att jag var tvungen att överge.
En semla som tack för hjälpen! ;)

semla.jpg
emissionMedlem sedan dec. 19996 721 inlägg
#19

Erik Juhlin skrev:

En semla som tack för hjälpen! ;)

*skrapar bort mandelmassan och glufsar i mig*

GladhMedlem sedan maj 20012 812 inlägg
#20

Erik skrev:

Och jag har inte sagt att det är något tillfälligt eller en test miljö jag vill göra det i.

Inte för att vara sådan, men varför ihela världen har man en klustermiljö om man ändå tänker gå runt den bakvägen. Känns inte helt rätt i min värld, men du har säkert någon bra anledning till att "misshandla" servern ;)

- M

165 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
162 ms — hämta tråd, inlägg och bilagor (db)