Заранее прошу прощения за ошибки: я не программист, а лишь студент. Более опытных людей попрошу поправить меня и если что - статья будет изменена или переписана.
И так, недавно начал писать програмку, которая должна работать с вебом (автоматизировать некоторые рутинные задачи, к примеру постить сообщения в мой блог в заданное время). Пришлось разобраться как работает браузер и что же реально происходит "за кулисами". Для начала нужно было понять, что происходит просто при нажатии на кнопку? Само собой кнопка может вести на страницу, может вызывать скрипт, а может вызывать submit. Если с первыми двумя все более-менее ясно и на интуитивном уровне, то с последним все сложнее.
Если вкратце - веб сервера* могут обмениваться сообщениями. В нашем случае наш браузер представляет собой веб-сервер. Для обмена сообщениями веб сервера используют методы Request и Response (запрос и ответ). Тоесть мы отправляем реквест веб-серверу, он нам возвращает респонс (например html страницу). Отлично, с ответом все более менее ясно: веб сервер возвращает нам либо html страницу либо файл, но что же происходит во время запроса?
Обычно мы юзаем обыкновенный httpRequest для передачи запроса, у которого есть два метода: Get и Post. Get метод это почти что переход по ссылке. Вначале запроса написан url, потом символ "?", который указывает на начало передачи параметров, потом сами параметры. Параметры, которые передаются, это и есть необходимые параметры для сервера, чтобы дать нам ответ. Эти параметры всегда передаются в виде пары Name=Value.
Допустим мы логинимся на сайте. Для этого нам нужно заполнить поле логин, пароль и нажать на кнопку.
Если посмотреть в html код страницы, то можно увидеть, что поле для ввода имени будет иметь атрибут name="someName", и возможно value="emptyValue"/defaultValue="defaultValue".
В случае с логином у нас будет:
input name="login" value="" /
input name="pass" value="" /
Пары данных формируются таким образом: name=value и разделяются знаком "&".
Get запрос будет выглядеть так
http://somesite.com/login.html?login=myLoginName&pass=myPassword
С Get разобрались, что же с Post. Если говорить грубо, Post - это расширенный Get запрос. В случае с Post запросом наш веб сервер передает все тоже самое, что и Get запрос + передает данные типа user-agent, cookies, cookie-policy host, content-length, connection-type.
Понять, как работать с Post запросом сложнее, поскольку наличие браузера скрывает от нас сам процесс Post запроса. Для того, чтобы хоть как-то упростить эту часть посмотрите на краткий пример (язык - java. Позже будет оформлен более полный пример):
...
code:
HttpConnection conn = null;
String url = "http://www.mysite.com/login.jsp";
String agent = "Mozilla/4.0";
String rawData = "userid=joe&password=guessme";
String type = "application/x-www-form-urlencoded";
String encodedData = encode( rawData ); // user-supplied
try {
conn = (HttpConnection) Connector.open( url );
conn.setRequestMethod( HttpConnection.POST );
conn.setRequestProperty( "User-Agent", agent );
conn.setRequestProperty( "Content-Type", type );
conn.setRequestProperty( "Content-Length",
encodedData.length() );
OutputStream os = conn.openOutputStream();
os.write( encodedData.getBytes() );
int rc = conn.getResponseCode();
... // process it
}
catch( IOException e ){
// handle the error here
}
...
(с)
http://developers.sun.com/mobility/midp/ttips/HTTPPost/
*Web-сервером называют программу, которая принимает HTTP-запросы, обрабатывает их и выдает ответ.