Pergunta

Eu estou tentando fazer um simples HTTP postar um endpoint com argumentos SOMENTE URL.

Pelo menos isso é como eu entendo as seguintes instruções:

POST para esse endereço com um url parâmetro único nome, o endereço do feed que mudou.

Tal como acontece com o método XML-RPC, ele verifica que a alimentação mudou, e se assim ele notifica os assinantes.

O evento é registrado. O valor de retorno é uma mensagem XML chamado resultado, com dois atributos, sucesso e msg.

Este é o meu código atualmente:

        public static void ping(string feed)
    {
        HttpWebResponse response = MakeRequest(feed);
        XmlDocument document = new XmlDocument();

        document.Load(response.GetResponseStream();
        string success = document.GetElementById("success").InnerText;
        string msg = document.GetElementById("msg").InnerText;

        MessageBox.Show(msg, success);
    }
        private static HttpWebResponse MakeRequest( string postArgument)
    {
        string url = path + "?" + UrlEncode(postArgument);
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        return (HttpWebResponse)request.GetResponse();
    }
    private static string UrlEncode( string value)
    {
        string result;
        result= HttpUtility.UrlEncode("url") + "=" + HttpUtility.UrlEncode(value);
        return result;
    }

Estou recebendo uma resposta incorreta do servidor assim que eu supor que eu estou fazendo errado de alguma forma. aqui está a resposta:

inválido no nível superior do documento. Erro de arquivo de processamento de recurso ': /// C: /Users/ADMIN/AppData/Local/Temp/VSD1.tmp.XML ...

rue ^

Todas as ideias ??

Agradecemos antecipadamente

Foi útil?

Solução 3

Aqui está o código que eu encontrei para trabalhar.

Nós usamos um HTTP POST, codificando parâmetros no corpo do fluxo. Isso nos dá "url-foobar" como o corpo de conteúdo. tipos de nenhum conteúdo, disposições, limites, etc. no corpo.

        private static HttpWebResponse MakeRequest(string path, string postArgument)
    {
        //string url = path + "?" + UrlEncode(postArgument);
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(path);

        request.Method = "POST";
        string boundary = Guid.NewGuid().ToString().Replace("-", "");
        request.ContentType = "multipart/form-data; boundary=" + boundary;
        Stream stream = request.GetRequestStream();
        string result = string.Format("url={0}", postArgument);
        byte[] value = Encoding.UTF8.GetBytes(result);
        stream.Write(value, 0, value.Length);
        stream.Close();

        return (HttpWebResponse)request.GetResponse();
    }
        public static void ping(string server, string feed)
    {
        HttpWebResponse response = MakeRequest(server, feed);
        XmlDocument document = new XmlDocument();
        string result = GetString(response.GetResponseStream());
        try
        {
            document.LoadXml(result);
        }
        catch
        {
            MessageBox.Show("There was an error with the response", "Error");
        }
        //MessageBox.Show(msg, success);

    }
    public static string GetString(Stream thestream)
    {
        int n = thestream.ReadByte();
        byte[] bytes = new byte[n];
        thestream.Read(bytes, 0, n);
        return Encoding.ASCII.GetString(bytes);
    }

As chamadas para GetString são apenas para fins de depuração e não são estritamente necessários.

Obrigado por todos que entrou na conversa aqui para me colocar no caminho certo.

Outras dicas

Eu não sei a API do .NET, mas: Eu entendo as instruções como: "executar um post sobre o URL com os argumentos de consulta", e o corpo pós deve ter a url = foobar parâmetro

IOW:. Em vez de tomar o postArgument e anexá-lo para a url, você deveria chamar a url e fornecer a URL corretamente codificado = foobar no corpo da mensagem

Além disso:. Eu não vê-lo definindo o pedido 'Aceitar' cabeçalho, que pode ser importante se os usos servidor que reconhecer que formato a responder com

A melhor maneira de fazer um formas postar em .NET é usar a classe WebClient. Essa classe vai fazer a coisa correta para enviar os dados, tanto como um POST (com parâmetros no corpo da entidade) ou como um GET (com parâmetros codificados como argumentos de seqüência de consulta).

E você precisa nos mostrar a exceção real que o cliente está dando para trás, a fim de descobrir o que está errado ..

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