#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, чтобы увидеть, что именно публикует страница при отправке формы. Возможно, в форме есть больше полей.