Передмова
Просте копіювання коду марно. Ця стаття починається з основних принципів роботи із HTTP-запитами. Позаду є приклади. Сподіваюся, ви зможете прочитати їхній крок за кроком, щоб ми могли впоратися з ним незалежно від того, який запит ми пишемо.
Склад HTTP
Повідомлення http складається із запиту від клієнта до сервера та відповіді сервера клієнту.Формат повідомлення HTTP-запиту
Між заголовком запиту та тілом запиту є порожній рядок, який повідомляє серверу, що заголовок запиту закінчився, і наступне це тіло запиту.
Метод запиту: get, post, head, delete і т. д., повідомте серверу, в чому полягає ваша конкретна операція
URL: короткий опис розташування та методу доступу до ресурсів можна отримати в Інтернеті. Структура URL: Протокол // ім'я домену або IP-адреса: номер порту / каталог / ім'я файлу. Суфікс імені файлу? Параметр = значення
Версія протоколу: майже всі використовувані в даний час - це версія http1.1, в якій додано дуже важливу функцію, що підтримує довгі з'єднання, а інші специфічні нюанси не описані.
Заголовок запиту: заголовок запиту додає додаткову інформацію до повідомлення запиту. Він складається з пар «ім'я / значення», по одній парі на рядок, а ім'я та значення поділяються двокрапкою.
Тіло запиту: додайте об'єкт запиту, який є контентом, який ви хочете запитати для запиту POST, GET не використовується
Формат повідомлення HTTP-відповіді
Код стану HTTP
Заголовок відповіді HTTP
За допомогою наведеного вище аналізу ми можемо виявити, що HTTP-запити насправді схожі надсилання електронних листів. Ми повідомляємо адресу поштового відділення, і поштове відділення надсилає електронного листа.Заголовок запиту - це деяка інформація, яку ми вклали, і ми можемо повідомити одержувачу, хто надіслав електронного листа та хто може його прочитати.
Це зашифрований електронний лист. Відповідно до яких правил ви хочете перекласти цей електронний лист і т. д., зміст запиту - це, звичайно, конкретний контент, який ми хочемо відправити, відповідь - це лист у відповідь від одержувача мені, а заголовок відповіді повідомить нам деяка додаткова інформація, наприклад, він сказав нам, що одержувач, який ви відправили, не отримав (404) або я отримав ваш лист правильно (200), який метод шифрування моєї відповіді вам, як ви її розшифровуєте, і зміст відповіді - це він Щоб повідомити нам конкретний контент, ви також можете використовувати поштове відділення як агента, а одержувача - як сервер.
Актуальний бій
Потім ми використовуємо JAVA для створення деяких запитів відповідно до вищезазначених правил.POST без запиту методу запиту об'єкта
import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils;
public class TestHttp
public void postOne()
HttpClient client = new DefaultHttpClient(); HttpResponse response = null; String url = "http://write.blog.csdn.net/postedit"; HttpPost post = New HttpPost(url); post.setHeader("Content-Type", "application/json"); response = client.execute(post); String ret = EntityUtils.toString(response.getEntity(), "UTF-8"); System.out.println(ret);
1. По-перше, нам потрібно створити клієнта. Інтерпретація Apache класу HttpClient полягає в тому, що цей інтерфейс є лише базовим контрактом для виконання HTTP-запитів. Він не накладає жодних обмежень чи конкретних деталей на процес виконання запиту, і він керуватиме статусом та ідентифікацією. Деталі аутентифікації та обробки перенапрямків залишені на розсуд окремих реалізацій. Конкретне значення полягає в тому, що ми повинні спочатку створити цей HTTPClient, якщо ми хочемо відправити HTTP-запит, але він включає деякі конкретні деталі, такі як файли cookie, заголовки та запити. Нам не потрібно використовувати її для реалізації тіла. Ми залишаємо ці деталі для реалізації іншим класам.
2. Ми створюємо адресу запиту, тобто кому ми хочемо надіслати цей запит3. Побудова запиту Post, HttpPost має конструктор HttpPost (String uri), ми використовуємо цей конструктор для ініціалізації HttpPost.
4. Додати заголовок. У HttpPost є методи setheader і addheader. Ці методи похідні від інтерфейсу org.apache.http.HttpMessage. Це різниця між add і set. Насамперед, заголовок з тим самим ім'ям.
Їх може бути більше одного. Перший використовується під час виконання.Коли ми використовуємо addheader, якщо заголовок з тим самим ім'ям вже існує, він буде доданий до вихідного заголовка з тим же ім'ям. При використанні setheader він перезапише заголовок з тим же ім'ям. Я в заголовку
Тіло запиту, яке я хочу відправити, задається у формі json (насправді тіло запиту не переноситься. Приклад, що містить тіло запиту, буде наведено нижче)
5. Після того, як ми створимо клієнта та запросимо заголовок та URL-адресу, ми можемо відправити в цей час. Звичайно, client.execute виконує запит.
6. Наступним кроком є прийняття відповіді, тобто після того, як ми відправимо електронний лист, інші дадуть нам відповідь, ми повинні спробувати отримати вміст цієї відповіді, а саме HttpResponse response = client.execute (post), щоб зв'язати наш запит і відповідь, що означає, що це відповідь - це відповідь мого виконання цього запиту. GetEntity - це метод, який постачається з цим класом для отримання об'єкта відповіді, тобто конкретного вмісту відповіді. Є багато способів отримати інформацію про відповідь. Якщо вам цікаво, ви можете вивчити його самостійно
7. Клас EntityUtils в основному використовується для обробки HttpEntity. Він має кілька статичних методів. Я використовую для перетворення об'єкта відповіді в рядок у форматі UTF-8 кодування і, нарешті, його роздруківку.
Конкретна відповідь
Object moved to here.
Є інший контент, який не можна вставляти сюди, повернутий html-код - це адресне посилання для повторного входу, клацніть по ньому, щоб повідомити нам знову увійти в систему, тому що URL-адреса, яку я відвідав, є сторінкою редагування csdn, як я можу отримати до нього прямий доступ без входу до системи, ми можете спробувати використовувати файли cookie. Це просунутий метод. Ми відкриваємо браузер, включаємо режим розробника, а потім знову авторизуємося, знаходимо інтерфейс csdnbi, а потім отримуємо файли cookie у заголовку запиту.
Знайшовши файл cookie, ми можемо використовувати post.setheader («Cookie», «*****»), щоб обійти логін і безпосередньо запросити цю сторінку. Охочі можуть спробувати.
