2014-10-23 2 views
0

У меня есть приложение C# для доступа к данным с стороннего веб-сайта. Я использую WebClient, и я вызываю DownloadData и обрабатываю байты (DownloadFile даст аналогичные результаты).Скачивание файла с webscraper иногда приводит к HTML-странице

Это прекрасно работало до недавнего времени. Теперь, чаще всего, вместо того, чтобы выбрать нужный файл XML, я получаю HTML-страницу, аналогичную:

<!-- _localBinding --> 
<!-- _lcid="1033" _version="" --> 
<html> 
    <head> 
     <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8" /> 
     <meta HTTP-EQUIV="Expires" content="0" /> 
     <noscript> 
      <meta http-equiv="refresh" content="0; url=/_layouts/spsredirect.aspx?noscript=1" /> 
     </noscript> 
     <script language="javascript" src="/_layouts/1033/init.js"></script> 
     <script language="javascript" src="/_layouts/1033/core.js"></script> 
     <script language="javascript"> 

     var requestedUrl = escapeProperly(window.location.href); 
     STSNavigate("/CustomErrors/ErrorPage.aspx?oldUrl=" + requestedUrl); 

    </script> 
    </head> 
    <body></body> 
</html> 

Я проковылял, почему это пошло из последовательно работающих последовательно дает мне проблемы. Иногда я могу получить ожидаемый файл XML. У вас есть идея, что может быть эта проблема и как я могу ее исправить?

Возможно, стоит отметить, что если бы я вручную щелкнул ссылку загрузки в браузере, окно javascript всплыло и закроется перед загрузкой файла. Я использую WebBrowser для перехвата нестатического URL этого всплывающего окна и передает эту ссылку (и заголовки/данные cookie) в WebClient. Ссылка будет выглядеть примерно так https://foo.bar/Something.axd?Session=1234vv1234Format=XML

Спасибо за ваше время

ответ

0

Похоже страница третьей стороны бросает исключение. Это может быть связано с параметрами, которые вы передаете, или это может быть проблемой на их конце. Лучшим способом действий было бы связаться с провайдером и посмотреть, какие ошибки регистрируются (надеюсь, они где-то записывают их). В противном случае вы просто будете гадать, что вы делаете неправильно.

Возможно ли, что в параметре querystring сеанса есть кодированные \ экранированные символы, которые не обрабатываются должным образом? Это было бы моим первым догадком, так как нет никаких реальных данных об ошибках.

+0

Благодарим за быстрый ответ! Это обнадеживает. Их сайт, похоже, очень плохой, но это также мой первый случай, когда мы делаем что-то подобное. Что касается запроса, единственными специальными символами, которые я вижу в URL-адресе, являются: + и & –

+0

Я часто работал с платежными шлюзами, и мы сталкивались с такими странностями. Я нашел на ранней стадии, что вы могли потратить три дня на то, чтобы угадать такую ​​проблему, а затем разрешить ее одним письмом в свою службу поддержки. Попытка отладить ошибку, не имея возможности увидеть ошибку, очень сложна. – DVK

0

Если это ошибка, я попытаюсь собрать код состояния HTTP, вы можете сделать это, используя HttpWebRequest и HttpWebResponse (я считаю, что эти предварительно установленные WebClient). Есть сложные способы по-прежнему использовать WebClient и получать код состояния, я бы также проверял тип контента, прежде чем вы действительно загрузите.

В любом случае, даже если вы обслуживаете страницу с ошибкой, сервер должен ответить соответствующим кодом состояния HTTP. (По крайней мере, в идеальном мире).

+0

Я использовал код Дмитрия http://stackoverflow.com/questions/3574659/how-to-get-status-code-from-webclient для определения кода состояния. Перед загрузкой: 0. После: 200 OK. Загруженные данные: HTML-страница вверху. –

+0

Много раз, когда используется страница пользовательских ошибок, код состояния теряется. Даже ASP.NET CustomErrors будет маскировать код состояния. – DVK

+0

@ DVK Ну, это супер раздражает ... – jamesbar2

Смежные вопросы