Имитация публикации страницы с помощью WebClient.UploadValues ​​() - PullRequest
0 голосов
/ 01 апреля 2012

Я использую следующий код для имитации поста на странице. (Я делю подклассы WebClient, чтобы я мог расширить некоторые защищенные члены.)

public class AuthorizeNetClient : WebClient
{
    public string PostData(string url, FormCollection formData)
    {
        byte[] response = UploadValues(url, formData);
        return Encoding.ASCII.GetString(response);
    }
}

Этот код прост, но у меня есть две проблемы:

  1. Я знаю, что получу исключение в случае ошибки, но я думаю, что результаты с неуспешными кодами состояния HTTP все еще возможны. Есть ли способ получить эти коды состояния, не анализируя результаты?

  2. Кроме того, мне нужно добавить несколько заголовков, чтобы это выглядело как реальный пост страницы. Любые хорошие примеры этого и тип заголовков, которые мне нужно добавить?

1 Ответ

1 голос
/ 01 апреля 2012

Единственный заголовок запроса, необходимый для FORM POST, это 'content-type: x-www-form-urlencoded'.

Кроме того, WebClient сгенерирует исключение для всех кодов состояния HTTP! = 2xx (т. Е. Успех), поэтому с вами все будет в порядке. Вам просто нужно перехватить WebException и посмотреть, есть ли e.Status == WebExceptionStatus.ProtocolError. Если это так, вы можете получить объект HttpWebResponse из объекта Exception (e.Response) и делать с ним все, что захотите.

...