2015-02-19 3 views
0

Страница, отображающая данные только после заполнения запроса POST из веб-формы.Как получить данные со страницы в переменной после запроса POST

Проблема, которую я не могу понять, как получить данные со страницы в переменной после отправки запроса на отправку.

мой код:

void main() 
{ 
    string baseurl = "http://www.kakioka-jma.go.jp/cgi-bin/plot/plotNN.pl"; 
    string postreq = "place=kak&lang=en&datatype=provisional&datakind=e&sampling=1-min&hipasssec=150&year=2015&month=2&day=18&hour=0&min=0"; 

    auto http = HTTP(baseurl); 

    http.postData = postreq; 
    auto x = http.responseHeaders(); 
    http.perform(); 
    writeln("="); 
    writeln(x); 
} 

После завершения http.perform(); я вижу на содержимое консоли страницы. Но я не хочу выводить. Я хочу поместить его в переменную, а затем проанализировать.

И это выглядит, что writeln(x); пуст ...

Не могли бы вы показать пример и сказать, что я делаю неправильно, пожалуйста.

+1

Чтобы вытащить контент, вам нужно использовать парсер HTML. См. [Этот вопрос и его ответы] (http://stackoverflow.com/questions/11936434/is-there-a-html-parsing-for-d). –

+0

Перед анализом данных мне нужно их получить. – Suliman

+0

Решение Aaron должно работать, но причина, почему вы этого не делаете, вероятно, потому, что вам нужно настроить обратный вызов onReceive. 'строка ответа; http.onReceive = (ubyte [] data) { \t \t Ответ ~ = данные; \t \t return data.length; }; ' – Hassan

ответ

1

Библиотека std.net.curl фактически обеспечивает функции более высокого уровня для HTTP get и post. Вы можете получить текст страницы, делая это:

void main() 
{ 
    string baseurl = "http://www.kakioka-jma.go.jp/cgi-bin/plot/plotNN.pl"; 
    string postreq = "place=kak&lang=en&datatype=provisional&datakind=e&sampling=1-min&hipasssec=150&year=2015&month=2&day=18&hour=0&min=0"; 
    string content = post(baseurl, postreq).idup; 
    writeln(content); 
} 

Тогда передайте content вашей функции синтаксического анализа. Вы также можете передать переменные в скрипт на языке Perl на этой странице, как URL переменные с GET вызовом:

string myurl = "http://www.kakioka-jma.go.jp/cgi-bin/plot/plotNN.pl?place=kak&lang=en&datatype=provisional&datakind=e&sampling=1-min&hipasssec=150&year=2015&month=2&day=18&hour=0&min=0"; 
string content = get(myurl).idup; 

без необходимости беспокоиться о размещении данных.

+0

Не могли бы вы проверить свой пример. '' 'Ошибка: найден 'http', ожидая ';' следующий оператор''' Также какое значение сохранит данные со страницы? Также я попытался использовать пример из ссылки. Это не текст, а цифры, такие как: '' '73, 86, 62, 10, 60, 47, 66, 79, 68, 89, 62, 10, 60, 47''' – Suliman

+0

Но как насчет того, ubytes? Мне нужно получить страницу как строку ... – Suliman

+0

Извините, исправлен код, чтобы показать, как получить ответ HTTP как строку. Передайте эту строку вашему парсеру. Функции 'get()' и 'post()' возвращают массив 'char []', но 'idup' преобразует это в неизменяемую строку для вас. –

Смежные вопросы