опубликовать URL-адрес в c # и получить html

#c# #url #post

#c# #url #Публикация

Вопрос:

Мне нужно получить html-код конкретной страницы. Формат URL-адреса:

http://www.externalwebsite.com/dir/page.html?p1=parameter1valueamp;p2=parametervalue2

Когда я получаю html-код этой страницы, появляется список скрытых значений, заполненных параметрами p1 и p2, которые были написаны ранее в строке запроса. Затем есть действие POST, которое перенаправляет на «/dir/page.html «: На этой странице есть HTML-контент, который мне нужен.

Есть ли какой-либо способ получить HTML-содержимое «dir/page.html » ?

Любая помощь действительно ценится!

Спасибо

Я уже реализовал GetResponseStream с помощью streamreader, но я получаю этот фрагмент HTML:

 <form name="myForm" method="post" action="/dir/page.html" accept-charset="ISO-8859-1">
    <input type="hidden" name="p1" value="parameter1">
    <input type="hidden" name="p2" value="parameter2">
</form>
 

Комментарии:

1. чего именно вы хотите достичь? Заполнены ли скрытые поля клиентским кодом?

2. Я не знаю, как заполняются скрытые поля, потому что «externalwebsite» — это не веб-сайт, управляемый мной. В любом случае я пытаюсь еще раз объяснить, как обстоят дела: -пользователь продолжает externalwebsite.com/dir / … -есть действие POST на externalwebsite.com/dir/page.html с помощью html-кода, который мне нужно получить. Я полагаю, что есть сеанс / файл cookie или что-то еще, что «говорит» веб-сайту «ок, страница была правильно вызвана, показать содержимое html!».

3. Возможно, вам лучше всего создать экземпляр InternetExplorer в своем приложении и перейти на страницу — это имитирует пользовательский интерфейс, после чего вы сможете получить нужные значения.

Ответ №1:

Вы хотите GetResponse . Что-то вроде..

 HttpWebRequest request =          
    WebRequest.Create("http://www.externalwebsite.com/dir/page.html");
HttpWebResponse response  = request.GetResponse();
StreamReader reader  = New StreamReader(response.GetResponseStream());
string sHTML = reader.ReadToEnd();
 

Комментарии:

1. Я уже реализовал этот фрагмент кода. Смотрите подробности, которые я только что добавил в своем сообщении. Спасибо 🙂

Ответ №2:

Вы отправили HTTP-запрос GET, но при отправке формы вы должны отправить HTTP-запрос PUT на сервер, который содержит два параметра p1 и p2.

Вы можете использовать WebRequestClass или WebClient класс и UploadValues метод для отправки параметров с HTTP POST:

 WebClient wc = new WebClient();
byte[] result = wc.UploadValues("http://www.externalwebsite.com/dir/page.html", 
                                "POST", 
                                new NameValueCollection
                                    {
                                        { "p1", parameter1 }, 
                                        { "p2", parameter2 }
                                    });
 

Комментарии:

1. Ничего не нужно делать… Я всегда получаю одну и ту же страницу с HTML-кодом hiddenfield (см. html-код, который я написал в своем первом сообщении).

2. Я бы предложил запустить fiddler, чтобы увидеть, что именно публикует страница при отправке формы. Возможно, в форме есть больше полей.