C #WebRequest.getResponse ():400 Bad Request

Я пытаюсь загрузить файл с сервера с помощью System.Web. Это на самом деле работает, но некоторые ссылки вызывают у меня проблемы. Ссылки выглядят так:

http://cdn.somesite.com/r1KH3Z%2FaMY6kLQ9Y4nVxYtlfrcewvKO9HLTCUBjU8IBAYnA3vzE1LGrkqMrR9Nh3jTMVFZzC7mxMBeNK5uY3nx5K0MjUaegM3crVpFNGk6a6TW6NJ3hnlvFuaugE65SQ4yM5754BM%2BLagqYvwvLAhG3DKU9SGUI54UAq3dwMDU%2BMl9lUO18hJF3OtzKiQfrC/the_file.ext

Код выглядит примерно так:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link);
WebResponse response = request.getResponse();

getResponse ()всегда выдает исключение (Ошибка 400 Bad Request ). Однако я знаю, что ссылка работает, потому что я могу без проблем загрузить файл с помощью Firefox.

Я также пытался декодировать ссылку с помощью Uri.UnescapeDataString (link ), но эта ссылка не работает даже в Firefox.

Другие ссылки работают таким же образом... но эти не будут работать.

Изменить:

Хорошо, я нашел кое-что с помощью wireshark:

Если я открою ссылку с помощью Firefox, это будет отправлено:

&ME3@"dM*PNyAo PA:]GET /r1KH3Z%2FaMY6kLQ9Y4nVxYp5DyNc49t5kJBybvjbcsJJZ0IUJBtBWCgri3zfTERQught6S8ws1a%2BCo0RS5w3KTmbL7i5yytRpn2QELEPUXZTGYWbAg5eyGO2yIIbmGOcFP41WdrFRFcfk4hAIyZ7rs4QgbudzcrJivrAaOTYkEnozqmdoSCCY8yb1i22YtEAV/epd_outpost_12adb.flv HTTP/1.1
Host: cdn.somesite.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive

Я думаю, проблема только в первой строке, потому что WebRequest.Create (ссылка )декодирует URL-адрес:

&MEz.@!dM/nP9@~P>.GET /r1KH3Z/aMY6kLQ9Y4nVxYp5DyNc49t5kJBybvjbcsJJZ0IUJBtBWCgri3zfTERQught6S8ws1a%2BCo0RS5w3KTmbL7i5yytRpn2QELEPUXZTGYWbAg5eyGO2yIIbmGOcFP41WdrFRFcfk4hAIyZ7rs6Mmh1EsQQ4vJVYUwtbLBDNx9AwCHlWDfzfSWIHzaaIo/epd_outpost_12adb.flv HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0
Host: cdn.somesite.com

(%2F заменяется на /)

Другое редактирование:

Я обнаружил, что класс Uri автоматически декодирует URL-адрес :Uri uri = новый Uri (ссылка ); //ссылка не декодируется Debug.WriteLine (uri.ToString ()); //здесь расшифровывается ссылка.

Как я могу предотвратить это?

Заранее спасибо за помощь.

8
задан Ian 2 May 2012 в 14:43
поделиться