C # WebRequest.getResponse (): 400 Bad Request
Próbuję pobrać plik z serwera za pomocą System.Web. To działa, ale niektóre linki sprawiają mi kłopoty. Linki wyglądają tak:
<code>http://cdn.somesite.com/r1KH3Z%2FaMY6kLQ9Y4nVxYtlfrcewvKO9HLTCUBjU8IBAYnA3vzE1LGrkqMrR9Nh3jTMVFZzC7mxMBeNK5uY3nx5K0MjUaegM3crVpFNGk6a6TW6NJ3hnlvFuaugE65SQ4yM5754BM%2BLagqYvwvLAhG3DKU9SGUI54UAq3dwMDU%2BMl9lUO18hJF3OtzKiQfrC/the_file.ext </code>
Kod wygląda zasadniczo tak:
<code>HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link); WebResponse response = request.getResponse(); </code>
getResponse () zawsze zgłasza wyjątek (błąd 400 Bad Request). Wiem jednak, że link działa, ponieważ mogę go pobrać bez problemów z Firefoksem.
Próbowałem także zdekodować link za pomocą Uri.UnescapeDataString (link), ale ten link nie zadziała nawet w Firefoksie.
Inne linki działają idealnie w ten sposób .. te nie działają.
Edytować:Dobrze, znalazłem coś przy użyciu wireshark:
Jeśli otworzę link za pomocą przeglądarki Firefox, zostanie on wysłany:
<code>&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 </code>
Myślę, że problem dotyczy tylko pierwszej linii, ponieważ WebRequest.Create (link) dekoduje adres URL:
<code>&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 </code>
(% 2F jest zastąpiony przez /)
Kolejna edycja:Dowiedziałem się, że klasa Uri automatycznie dekoduje url: Uri uri = new Uri (link); // link nie jest dekodowany Debug.WriteLine (uri.ToString ()); // link jest tutaj dekodowany.
Jak mogę temu zapobiec?
Z góry dziękuje za twoją pomoc.