Бърз старт на библиотеката с заявки - Linux програмиране Windows
Готови ли сте да започнете? Библиотека с заявки: Бърз старт Тази страница ви дава добра представа как да започнете с заявките.
Първо се уверете, че:
- Заявките са зададени
- Заявките са актуализирани
Нека започнем с няколко прости примера.
Създайте заявка
Създаването на заявка със Заявки е много лесно.
Започнете с импортиране на модула Заявки:
Сега нека се опитаме да получим уеб страница. Например, нека вземем публична времева линия на GitHub.
Сега имаме обект Response с име r. Можем да получим цялата необходима информация от този обект.
Простият API за заявки означава, че всички форми на HTTP заявки са ясни. Например, ето как можете да направите HTTP POST заявка:
Готино? Какво ще кажете за други видове HTTP заявки: PUT, DELETE, HEAD и OPTIONS? Те са също толкова лесни за изпълнение:
Вече е добре. Дори страхотно. Но това не е всичко, което може да направи Requests.
Предаване на параметри към URL адреса
Често искате да изпратите някои данни в низа на заявката на URL. Ако създадете URL ръчно, тогава тези данни ще бъдат представени в него като двойки ключ-стойност след въпросителния знак. Например httpbin.org/get?key=val. Заявките ви позволяват да предавате тези аргументи като речник, като използвате аргумента params. Като пример, ако искате да предадете key1=value1 и key2=value2 към httpbin.org/get ресурс, ще използвате следния код:
Можете да видите, че URL адресът е кодиран правилно:
Имайте предвид, че всеки речников ключ, чиято стойност е None, няма да бъде добавен към URL низа на заявката.
Съдържание на отговора
Заявките автоматично ще декодират съдържанието на отговора на сървъра. МнозинствоUnicode кодировките се декодират без проблеми.
Когато направите заявка, Requests прави предположение за кодиране въз основа на HTTP заглавките. Текстовото кодиране, познато от Requests, се използва при достъп до r.text. Можете да разберете какво кодиране използва Requests и да го промените с помощта на свойството r.encoding:
Ако промените кодирането, Заявките ще използват новата стойност на r.encoding винаги, когато използвате r.text. Можете да направите това във всяка ситуация, в която се нуждаете от по-специализирана логика за работа с кодирането на съдържанието на отговора. Например в HTML и XML е възможно да зададете кодирането директно в тялото на документа. В ситуации като тази трябва да използвате r.content, за да намерите кодирането и след това да зададете r.encoding. Това ще ви позволи да използвате r.text с правилното кодиране.
Заявките могат също да използват персонализирани кодировки, в случай че имате нужда от тях. Ако сте създали свое собствено кодиране и сте го регистрирали в модула за кодеци, можете просто да използвате името на кодека като стойност на r.encoding и Requests ще работи с това кодиране вместо вас.
Съдържание на двоичен отговор
Можете също така да получите достъп до тялото на отговора като байтове за нетекстови заявки:
Предаванията с компресия gzip и deflate се декодират автоматично.
Например, за да създадете изображение от двоичните данни, върнати в отговор на заявка, можете да използвате следния код:
Съдържание на JSON отговор
Библиотеката с заявки също се предлага с вграден JSON декодер, в случай че работите с JSON данни:
Сурово съдържание на отговора
В редките случаи, когато искате да получите достъп до суровия отговор на сървъра на нивоsocket, можете да се обърнете към r.raw. Ако искате да направите това, уверете се, че сте задали stream=True в първата си заявка. След това вече можете да направите следното:
Сега можете да използвате код като този като шаблон, за да запазите получения поток във файл:
Персонализирани HTTP заглавки
Ако искате да добавите HTTP заглавки към заявката, просто подайте съответния речник в параметъра за заглавки.
Например не сме посочили заглавката тип съдържание в предишния пример:
По-сложни POST заявки
Често искате да изпратите някои данни, кодирани във формуляр, точно както бихте направили в HTML формуляр. За да направите това, просто предайте съответния речник в аргумента data. След това вашият речник на данни ще бъде автоматично кодиран като HTML формуляр, когато бъде направена заявка:
Но има много случаи, в които може да искате да изпратите данни, които не са кодирани във формуляр. Ако подадете низ вместо речник към заявката, данните ще бъдат изпратени непроменени.
Например v3 GitHub API приема JSON-кодирани POST/PATCH данни:
Как да изпратите многостранно кодиран файл
Заявките улесняват изпращането на многостранно кодирани файлове към сървъра:
Можете изрично да зададете името на файла, типа на съдържанието и заглавките:
Ако искате, можете да изпратите низове, които да бъдат приети като файлове:
В случай, че изпращате много голям файл като multipart/form-data, може да искате да поточно предавате заявката. Requests не поддържа това по подразбиране, но има отделен пакет, който го прави, requests-toolbelt. Вижте документацията на Toolbelt.
За да изпратите няколко файла в една заявка, вижте допълнителната документация.
Кодове за състояние на отговор
Можем да проверим кода на състоянието на отговора:
За удобство Requests се предлага и с вграден обект за заместване на код на състояние:
Ако сме направили лоша заявка (грешка на клиент 4XX или грешка на отговор на сървър 5XX), тогава можем да хвърлим изключение с Response.raise_for_status() :
Но ако status_code за r е 200, тогава, когато извикаме raise_for_status(), получаваме:
Това означава, че всичко е наред.
Заглавки на отговорите
Можем да видим заглавките на отговора на сървъра с помощта на речник на Python:
Това обаче е речник от специален вид: той е направен специално за HTTP хедъри. Съгласно RFC 7230 имената на HTTP заглавките не са чувствителни към главни и малки букви.
По този начин можем да имаме достъп до заглавки със или без главни букви, ако искаме:
Ако отговорът съдържа бисквитки, можете бързо да получите достъп до тях:
За да изпратите свои собствени бисквитки към сървъра, можете да използвате параметъра cookies:
Пренасочвания и история
По подразбиране заявките ще пренасочат всички HTTP глаголи с изключение на HEAD.
Можем да използваме свойството history на обекта Response, за да проследяваме пренасочвания.
Списъкът Response.history съдържа обектите Response, които са създадени по време на изпълнението на заявката. Списъкът е сортиран от най-старите към най-новите.
Например GitHub пренасочва всички HTTP заявки към HTTPS:
Ако използвате GET, OPTIONS, POST, PUT, PATCH или DELETE, можете да деактивирате обработката на пренасочване с опцията allow_redirects:
Ако използвате HEAD, можете да активирате обработката на пренасочване:
Можете да кажете на Заявките да спрат да чакат отговор след определен брой секунди спараметър за изчакване:
Забележка: времето за изчакване не е ограничение във времето за пълно изтегляне на отговор. Изключение възниква, ако сървърът не е отговорил в секунди на изчакване (по-точно, ако не са получени байтове от главния сокет в секунди на изчакване).
Грешки и изключения
В случай на мрежов проблем (напр. грешка в DNS, неуспешна връзка и т.н.), заявките ще хвърлят изключение ConnectionError.
В по-редкия случай на невалиден HTTP отговор, Requests ще предизвика изключение HTTPError.
Ако времето за изчакване на отговора е превишено, се повдига изключение за изчакване.
Ако заявката надвишава посочения максимален брой пренасочвания, тогава се повдига изключение TooManyRedirects.
Всички изключения, хвърлени директно от Requests, са наследени от requests.exceptions.RequestException.
Готови ли сте за още?
Вижте допълнителния раздел на документацията.