Pergunta

Esta é a condução me louco e eu não consigo descobrir onde estou soltando a bola. Eu segui alguns exemplos encontrados através da googlemonsta sem sucesso. Qualquer ponteiro para onde eu goofed seria muito apperciated.

        var writer = new StringWriter();
        param = "location=" + Server.UrlEncode(param);
        byte[] paramStream = Encoding.ASCII.GetBytes(param + "&param2=value");
        var URL = "http://www.somesite.com";
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2";
        request.ContentLength = paramStream.Length;
        using( var stream = request.GetRequestStream())
        {
            stream.Write(paramStream, 0, paramStream.Length);
        }

        var response = request.GetResponse();

        string result;
        using (var sr = new StreamReader(response.GetResponseStream()))
        {
            result = sr.ReadToEnd();
        }

Obrigado!

EDIT: Tanto quanto eu posso dizer a bater o site (i estou recebendo html volta), mas os parâmetros não são empurrados ao longo. Basicamente, eu estou ficando onde os valores apareceria se tivesse sido bem sucedida. Eu tentei remover o primeiro & mas não tivemos qualquer lugar get.

EDIT:. código editado para refletir as alterações

Foi útil?

Solução

Possivelmente se livrar do & desde o início do primeiro parâmetro? Outros, que, basicamente, parece ok. (Confira os nomes de parâmetro no seu código Real - onde você tem "paramater" na amostra deve quase certamente ser "parâmetro" - mas nós não sabemos o que sua aparência de código reais como ou o que os reais espera do site.)

Por favor, dar mais informações sobre o que está realmente acontecendo. Sabemos que não funciona, mas há uma série de diferentes modos de falha possíveis:)

Um pensamento adicional ocorre - você não especificou o tamanho do conteúdo. Eu não tenho certeza se este é preenchido automaticamente pelo WebRequest. Seria vale a pena usar WireShark para verificar se é ou não do presente no pedido de saída.

Assim como um ponto geral da prática, você deve descartar o WebResponse, e você não precisa Close chamada, se você já tem uma declaração using para o fluxo de resposta:

string result;
using (WebResponse response = request.GetResponse())
{
    using (var sr = new StreamReader(response.GetResponseStream()))
    {
        result = sr.ReadToEnd();
    }
}

Outras dicas

Você tem certeza de ter todos os valores Necessário para o cargo? Uma vez tive um caso onde havia um campo de entrada oculto no formulário que era algo como:

<input name="action" type="hidden" id="action" value="login">

e eu tive que fornecer isso como um param como:

&action=login

Certifique-se que você não está faltando alguma coisa a partir do formulário é o que eu estou dizendo ...

EDIT: Mais uma coisa: Eu olhei para o meu código novamente onde eu fiz isso, e percebi que eu também tinha essa linha lá:

request.ContentLength = bytes.Length;

Não tenho certeza se você precisar disso, mas eu notei que você não estava definindo o comprimento.

Não é algo tão simples como a / new-line de retorno de carro depois que os parâmetros é? Olhando para alguns docs sobre HTTP nas internets, você aparentemente precisa de uma linha em branco depois.

(eu sugiro um telnet para o servidor web e colar manualmente o seu pedido.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top