Как заполнить внешнюю веб-форму с помощью приложения на c #? - PullRequest
1 голос
/ 23 сентября 2011

Есть некоторый URL (скажем, url1), который заблокирован до некоторого неизвестного времени. В настоящее время, когда вы запрашиваете url1, вы перенаправлены на url2. (Хотя в фиддлере я получаю 200 статус - почему?)

Когда будет доступен url1 - немногие первые люди, которые заполнят веб-форму и отправят ее, могут купить действительно хороший продукт по сниженной цене.

Я хочу написать приложение на c #, которое попытается получить доступ к url1 в цикле. После того, как он введет url1, я хочу, чтобы он заполнил заранее известную форму, выбрал выпадающий список и отправил запрос.

Я начал с:

static void Main(string[] args)
{
    string url = "https://url1";

    WebRequest request = HttpWebRequest.Create(url);

    WebResponse response = request.GetResponse();

    StreamReader reader = new StreamReader(response.GetResponseStream());

    string urlText = reader.ReadToEnd();

}

Но я не уверен, как: 1. проверьте URL-адрес ответа (я думал проверить 302, но filddler показывает 200. Могу ли я увидеть код состояния в этом StreamReader reader?)

  1. Учитывая этот пример формы, как я могу заполнить его автоматически?

                <td style="width: 100px;">
    
                    *First name:
    
                </td>
    
                <td>
    
                    <input name="ctl00$ctl00$Content$Main$OrderNameFirst" type="text" id="Content_Main_OrderNameFirst" style="width:150px;" />
    
                    <span id="Content_Main_RequiredFieldValidator9" class="textValidator" style="display:none;">שדה חובה</span>
    
                </td>
    
                <td style="vertical-align: top; padding-right: 100px;">
    
                    <input type="image" name="ctl00$ctl00$Content$Main$ImageButton1" id="Content_Main_ImageButton1" class="image" src="Images/buttonSubmitPaypal.png" onclick="javascript: return SubmitPaypal(this);" style="cursor:pointer;" />
    
    
    
                </td>
    
            </tr>
    
                </td>
    
            </tr>
    
            <tr>
    
                <td>
    
                    *Type:
    
                </td>
    
                <td colspan="2">
    
                    <select name="ctl00$ctl00$Content$Main$OrderCreditType" id="Content_Main_OrderCreditType">
    
    <option value="Visa">A</option>
    
    <option value="IsraCard">B</option>
    
    <option value="MasterCard">C</option>
    

1 Ответ

2 голосов
/ 23 сентября 2011

Единственный способ сделать это (без вызова javascript, который безумно запутан) - это использовать элемент управления веб-браузера для автоматического заполнения.

Вы можете использовать Web Response и Web Request, чтобы получить ответ, а когда он получит правильный ответ, вы можете использовать

          WebBrowser1.Navigate("http://url.com");

Оттуда вы можете использовать старый трюк для ввода данных в форму. Это не изменит адрес текущей страницы, но выполнит этот javascript на странице. Он найдет первый элемент с именем класса 'textbox' и присвоит ему значение 'email@domain.com'

         WebBrowser1.Navigate("javascript: void(document.getElementsByClassName('textbox')[0].value = 'email@domain.com')");

СОВЕТ: Вы можете сделать WebBrowser невидимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...