C# обнаруживают перенаправление страницы

Я пытаюсь определить, существует ли квалификация на http://www.accreditedqualifications.org.uk в форме:

http://www.accreditedqualifications.org.uk/qualification/50084811.seo.aspx

50084811 являющийся целью квалификации, вводимой конечным пользователем.

Если они вводят недопустимый, например.

http://www.accreditedqualifications.org.uk/qualification/50084911.seo.aspx

Они перенаправляются к ошибочной странице (с неправильными http заголовками насколько я вижу). Есть ли способ обнаружить перенаправление в C#. Я надеялся бы смочь обнаружить перенаправление в http заголовках (думающий, что оно выйдет 2), или подобный, как выступают к необходимости загрузить целую страницу. Это могло происходить много, таким образом, я хотел бы минимизировать трафик.

Править

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

http://pageheaders.com/display-http-headers.php?url=http%3A%2F%2Fwww.accreditedqualifications.org.uk%2Fqualification%2F50084911.seo.aspx&agent=ie6

8
задан Brian Webster 11 April 2012 в 02:43
поделиться

3 ответа

Самый простой способ - это, вероятно, получить контент с помощью запроса HEAD (установить Method в "HEAD") в HttpWebRequest , установив для AllowAutoRedirect значение false. Я не могу вспомнить, вызовет ли это исключение или нет, но в любом случае с этим должно быть легко справиться.

13
ответ дан 5 December 2019 в 06:37
поделиться

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

response.StatusCode == HttpStatusCode.Redirect

Вы можете просмотреть все возможности на http://msdn.microsoft.com/en-us/library/system.net.httpstatuscode.aspx

В качестве альтернативы, вам может показаться достаточным проверить, отличается ли Location в ответе.

var request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "HEAD";
request.AllowAutoRedirect = false;

string location;
using (var response = request.GetResponse() as HttpWebResponse)
{
  location = response.GetResponseHeader("Location");
}
return (location != uri.OriginalString);
12
ответ дан 5 December 2019 в 06:37
поделиться

Вы можете сделать это только с помощью веб-клиента с вашего сервера. Если вы дадите ссылку своему клиенту, вы не будете участвовать в общении между ним и аккредитованным квалификационным веб-сервером, и, следовательно, вы не сможете получить информацию о том, что ссылка была перенаправлена ​​на ошибку.

Насколько я понимаю ваш проект, я бы сделал несколько вызовов с моего сервера, используя Webclient (или что-то еще), чтобы убедиться, что квалификация существует, и сохранить результат в базе данных с указанием времени буферизации. Это позволило бы не совершать слишком много звонков и тем не менее получать достоверную информацию.

0
ответ дан 5 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

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