Fórum Requisições HTTP #6448

03/06/2009

0

Estamos migrando um sistema Delphi para C#.
Este sistema utiliza requisições HTTP (POST e GET) para uma URL.
Em C# com Windows.Forms estamos utilizando HttpWebRequest/HttpWebResponse para fazer isto.
Tudo OK!
O único problema é que temos uma URL que examina a requisição e verifica se a mesma foi enviada através do mesmo local na Web. Isso retorna uma mensagem de erro pelo site da URL...
No sistema em Delphi utilizamos alterar o Host do cabeçalho HTTP colocando o mesmo da URL e funciona normalmente.
O problema é que em C# o HttpWebRequest não permite a alteração deste parâmetro do Header.
Como fazer então?
Valter Ferreira

Valter Ferreira

Responder

Posts

04/06/2009

Luiz Maia

Valter,   Para setar as propriedades do Header, use:   public override WebHeaderCollection Headers { get; set; } Veja um quadro com as propriedades:Header Set by Accept Set by the Accept property. Connection Set by the Connection property and KeepAlive property. Content-Length Set by the ContentLength property. Content-Type Set by the ContentType property. Expect Set by the Expect property. Date Set by the system to the current date. Host Set by the system to the current host information. If-Modified-Since Set by the IfModifiedSince property. Range Set by the AddRange method. Referer Set by the Referer property. Transfer-Encoding Set by the TransferEncoding property (the SendChunked property must be true). User-Agent Set by the UserAgent property. Mas, de acordo com o pessoal da Microsoft, usando VS 2005, SP1, não tem como alterar qualquer propriedade do Header. Qual versão esta usando do framework?Veja resposta da MS:We are investigating this issue for possible inclusion in the next release of the .NET Framework.
Passos para reproduzir o erro: using System;
using System.Net;
using System.IO;
class Program
{
public static void Main(string[] args)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://208.77.186.166/Default.aspx");
request.Headers["Host"] = "www.example.com"; // This line throws an ArgumentException
using (WebResponse response = request.GetResponse())
{
using (TextReader reader = new StreamReader(response.GetResponseStream()))
{
string line;
while ((line = reader.ReadLine()) != null)
Console.WriteLine(line);
}
}
}
} Resultado da excessão: ArgumentException thrown.
The 'Host' header cannot be modified directly.
Parameter name: name  Espero ter ajudado.Qualquer coisa me avisem. AbraçosAttLuiz Maia    
Responder

Gostei + 0

04/06/2009

Valter Ferreira

Estou utilizando o Visual Studio 2008 com SP1.
Sim, o header em questão (Host) não pode ser alterado manualmente.
Isso já está escrito no próprio texto que você enviou "Host: Set by the system to the current host information.".
Ví que existem vários componentes de terceiros que permitem, logo, penso que existe alguma maneira de fazer isso nativamente no VS2008 porque é uma tarefa usual para quem utiliza estes recursos.
Qual seria uma alternativa?
Responder

Gostei + 0

05/06/2009

Luiz Maia

Ola Valter,   Ha  a possiblidade de vc usar um arquivo txt de HOST no servidor? Caso exista, esta é uma saida viável.   Aguardo seu retorno.   Att Luiz Maia
Responder

Gostei + 0

05/06/2009

Luiz Maia

Oi Valter,   Outra alternativa, acredito eu que a mais fácil e com pouco esforço, seria configurar os IPs diretamente no IIS, mas isto depende dos recursos de sua aplicação. Não sei se vc tem acesso ao Servidor e etc...   Aguardo Att   Luiz Maia  
Responder

Gostei + 0

07/06/2009

Luiz Maia

Ola Valter, como esta indo? Conseguiu resolver o problema? Estou aguardando um retorno seu, ok?   Abraços Att Luiz Maia
Responder

Gostei + 0

08/06/2009

Valter Ferreira

Ainda não.
Não podemos alterar nada na configuração nem do cliente e nem do servidor. Em Delphi eu só mudo o cabeçalho.
O problema é que encontrei exemplos de requisições GET/POST usando sockets, permitindo assim alterar o cabeçalho como eu queira... Infelizmente, por exemplo, perco as funcionalidades de gerenciamento de cookies. E para tê-la, devo implementar... Mas isso não é possível pelo custo e benefício.

Responder

Gostei + 0

09/06/2009

Luiz Maia

Ola Valter,    Pelo que vi, so existem estas soluções mesmo. Ou altera no IIS ou cria um arquivo HOST no diretorio do windows (ja que é uma aplicação windows). Talvez seja interessante vc alterar a forma que esta fazendo, ja que não pode mudar nada no servidor e cliente, mudar o paradigma de seus recursos, ao inves de migrar a aplicação, reconstrua outra nova, usando os recursos que o C# oferece.   O que exatamente esta tentando fazer? É algum tipo de chamado a Web Services ou algo parecido?   Abraços  Att Luiz Maia
Responder

Gostei + 0

09/06/2009

Valter Ferreira

Me ajude a pensar em outra solução para o que preciso...
O que eu preciso é fazer com que uma aplicação web pense que estou enviando uma requisição dela própria.
Por exemplo, se eu tenho um formulário teste.aspx e ele envia por POST informações para http://www.exemplo.com.br/form.aspx o form.aspx só aceitará estes dados se o teste.aspx esteja em www.exemplo.com.br. Assim, se eu disparo um POST através de um programa feito em Windows.Forms para http://www.exemplo.com.br/form.aspx deverei mudar o cabeçalho host para exemplo.com.br, pois o mesmo irá com o IP da máquina ou servidor que encontra-se minha aplicação.
Responder

Gostei + 0

09/06/2009

Luiz Maia

Ola Valter,   Pelo que estou compreendendo de sua aplicação, por que vc não constroi um WebService para fazer a conexão da app windows com a sua app web? Ha esta possibilidade?     Abraços Att Luiz Maia
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar