Python - HTTP İstekleri

Http veya Köprü Metni Aktarım Protokolü, istemci sunucu modelinde çalışır. Genellikle web tarayıcısı istemcidir ve web sitesini barındıran bilgisayar sunucudur. Python'da http isteklerini oluşturmak için istek modülünü kullanıyoruz. Basit istek ve yanıt verilerinin ötesinde http iletişiminin birçok yönünü idare edebilen çok güçlü bir modüldür. Kimlik doğrulama, sıkıştırma / açma, yığınlanmış istekleri vb. İşleyebilir.

Bir HTTP istemcisi, bir sunucuya aşağıdaki biçimi içeren bir istek mesajı biçiminde bir HTTP isteği gönderir:

  • Bir istek satırı
  • Sıfır veya daha fazla başlık (Genel | İstek | Varlık) alanları ve ardından CRLF
  • Başlık alanlarının sonunu gösteren boş bir satır (yani, CRLF'den önce hiçbir şey olmayan bir satır)
  • İsteğe bağlı olarak bir mesaj gövdesi

Aşağıdaki bölümler, bir HTTP istek mesajında ​​kullanılan varlıkların her birini açıklamaktadır.

İstek Hattı

İstek Satırı bir yöntem belirteci ile başlar, ardından İstek-URI ve protokol sürümü gelir ve CRLF ile biter. Öğeler boşluk SP karakterleriyle ayrılır.

Request-Line = Method SP Request-URI SP HTTP-Version CRLF

İstek Satırında belirtilen her bir bölümü tartışalım.

Talep Yöntemi

Talep method verilen ile tanımlanan kaynak üzerinde gerçekleştirilecek yöntemi gösterir Request-URI. Yöntem büyük / küçük harfe duyarlıdır ve her zaman büyük harfle belirtilmelidir. Aşağıdaki tablo, HTTP / 1.1'de desteklenen tüm yöntemleri listeler.

SN Yöntem ve Açıklama
1 GET

GET yöntemi, belirli bir URI kullanarak belirli bir sunucudan bilgi almak için kullanılır. GET kullanan istekler yalnızca verileri almalı ve veriler üzerinde başka bir etkisi olmamalıdır.

2 HEAD

GET ile aynıdır, ancak yalnızca durum satırını ve başlık bölümünü aktarır.

3 POST

POST isteği, HTML formları kullanılarak sunucuya müşteri bilgileri, dosya yükleme vb. Gibi veri göndermek için kullanılır.

4 PUT

Hedef kaynağın tüm mevcut temsillerini yüklenen içerikle değiştirir.

5 DELETE

URI tarafından verilen hedef kaynağın tüm mevcut temsillerini kaldırır.

6 CONNECT

Belirli bir URI tarafından tanımlanan sunucuya bir tünel oluşturur.

7 OPTIONS

Hedef kaynak için iletişim seçeneklerini açıklayın.

8 TRACE

Hedef kaynağa giden yolla birlikte bir mesaj döngüsü geri testi gerçekleştirir.

URI isteği

İstek-URI, bir Tekdüzen Kaynak Tanımlayıcısıdır ve talebin uygulanacağı kaynağı tanımlar. Bir URI belirtmek için en sık kullanılan formlar şunlardır:

Request-URI = "*" | absoluteURI | abs_path | authority
 
SN Yöntem ve Açıklama
1 Yıldız işareti *HTTP isteği belirli bir kaynağa değil, sunucunun kendisine uygulandığında kullanılır ve yalnızca kullanılan yöntemin bir kaynak için geçerli olmaması durumunda izin verilir. Örneğin:

OPTIONS * HTTP/1.1

2 absoluteURIbir proxy'ye HTTP isteği yapıldığında kullanılır. Vekilden, isteği veya hizmeti geçerli bir önbellekten iletmesi ve yanıtı döndürmesi istenir. Örneğin:

GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1

3 İstek URI'sinin en yaygın biçimi, bir kaynak sunucu veya ağ geçidindeki bir kaynağı tanımlamak için kullanılan biçimdir. Örneğin, bir kaynağı doğrudan kaynak sunucudan almak isteyen bir istemci, "www.w3.org" ana bilgisayarının 80 numaralı bağlantı noktasına bir TCP bağlantısı oluşturur ve aşağıdaki satırları gönderir:

GET /pub/WWW/TheProject.html HTTP/1.1

Host: www.w3.org

Mutlak yolun boş olamayacağını unutmayın; orijinal URI'de hiçbiri yoksa, "/" (sunucu kökü) olarak verilmelidir * ZORUNLU *.

Python isteklerini kullanma

Modül isteklerini http talebini öğrenmek için kullanacağız.

pip install requests

Aşağıdaki örnekte, basit bir GET talebi durumu görüyoruz ve yanıtın sonucunun çıktısını alıyoruz. Yalnızca ilk 300 karakteri yazdırmayı seçiyoruz.

# How to make http request
import requests as req
r = req.get('http://www.tutorialspoint.com/python/')
print(r.text)[0:300]

Yukarıdaki programı çalıştırdığımızda aşağıdaki çıktıyı alıyoruz -

<!DOCTYPE html>
<!--[if IE 8]><html class="ie ie8"> <![endif]-->
<!--[if IE 9]><html class="ie ie9"> <![endif]-->
<!--[if gt IE 9]><!-->	<html> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset="utf-8">
<title>Python Tutorial</title>
<meta name="description" content="Python Tutorial