c# сбой HttpWebRequest POST'ing

Спасибо за все ответы, в конечном итоге использовать следующее:

try:
  f = urllib2.urlopen(urllib2.Request(url))
  deadLinkFound = False
except:
  deadLinkFound = True
9
задан orip 15 November 2009 в 13:25
поделиться

3 ответа

В других ответах объясняется, как этого избежать, но я подумал, что отвечу, почему это происходит: вы заканчиваете с отметкой порядка байтов перед фактическим содержанием .

Этого можно избежать, вызвав new UTF8Encoding (false) вместо использования Encoding.UTF8 . Вот короткая программа, демонстрирующая разницу:

using System;
using System.Text;
using System.IO;

class Test    
{
    static void Main()
    {
        Encoding enc = new UTF8Encoding(false); // Prints 1 1
        // Encoding enc = Encoding.UTF8; // Prints 1 4
        string content = "x";
        Console.WriteLine(enc.GetByteCount("x"));
        MemoryStream ms = new MemoryStream();
        StreamWriter sw = new StreamWriter(ms, enc);
        sw.Write(content);
        sw.Flush();
        Console.WriteLine(ms.Length);
    }

}
23
ответ дан 4 December 2019 в 07:35
поделиться

You need not set ContentLength explicitly, since it will be set automatically to the size of data written to request stream when you close it.

2
ответ дан 4 December 2019 в 07:35
поделиться

Maybe make like easier:

using(WebClient client = new WebClient()) {
    NameValueCollection values = new NameValueCollection();
    values.Add("id",Id);
    byte[] resp = client.UploadValues("url","POST", values);
}

Or see here for a discussion allowing use like:

client.Post(destUri, new {
     id = Id // other values here
 });
4
ответ дан 4 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: