Yangın talebi yapmak için neden HTTP WordPress işlevini kullanmanız gerekiyor?

Bazen WordPress sitenizin web’deki diğer hizmetlerle konuşması gerekir. Bu neredeyse sadece HTTP protokolü kullanılarak gerçekleşir. Bunun yaygın bir örneği, WordPress’in yeni sürümünü, tema ve WordPress’in kendisinin çekirdeğini kontrol etmek için WordPress.org sunucusuyla iletişime geçtiğiniz WordPress kurulumunun olmasıdır. Bu aynı zamanda WordPress eklentisinde veya temasında yapılan çok yaygın bir şeydir. Harici hizmetlerle etkileşime giren herhangi bir eklenti kesinlikle burada ve orada bazı HTTP istekleri yapacaktır. MailChimp listenize müşteri eklemek, Amazon SES aracılığıyla e -posta göndermek veya resimleri Amazon S3’e taşımak gibi şeyler, birçok HTTP isteğinin yapımını içerir.
Bu yazıda, bu isteği yapmak için WordPress tarafından sunulan varsayılan HTTP işlevine daha yakından bakacağız ve bu işlevi kullanmak için neden neredeyse her zaman iyi bir fikir. Ama her şeyden önce, biraz arka plan. Bunu yanlış yapmak – PHP PHP işlevini kullanmak, HTTP istekleri yapmak için birkaç farklı yol sunar. FSockopen (), Fread () ve Fwrite () kullanarak HTTP isteğiniz için doğrudan ağ işlevleriyle çalışabilirsiniz, ancak sonunda zaman kaybedecek ve birçok tekerleği belirgin bir nedenden ötürü yeniden yaratacaksınız.
HTTP PHP protokolü sarmalayı işleyebilen okuma dosyalarının işlevlerinden birini kullanarak biraz daha iyi.Bu, biraz karmaşık olan FOPEN () ve çok daha kolay olan File işlevi () ve file_get_contents () içerir.Tek satır, basit bir satır aslında sizi yeterince uzatır: // Yalnızca Örnek Kod, bunu yapmayın!$ Response = file_get_contents (‘https://www.google.com/’);Ancak bu kodu WordPress eklentisine veya çocuğunuzun temasına girmeden önce, birçok barındırma sağlayıcının açılış URL’sini bu şekilde açıkça devre dışı bıraktığını lütfen unutmayın.Dolayısıyla, yerel geliştirme ortamınızda başarılı olan şey üretim ortamınızda çalışmayabilir.
Buna ek olarak, yalnızca PHP işlevlerini kullanarak internet URL’sinden içerik almak mümkün olduğu için günlük kalkınmada en iyi yaklaşım olduğu anlamına gelmez. Yalnızca HTTP isteklerindeki başlığı belirlemek için masum görünen gereksinimler eklemek, yukarıdaki örneği çok daha karmaşık hale getirir (yığın taşma örneği): // sadece örnek kodu, bunu yapmayın! // $ Opts = Array (“HTTP” => Array (“Yöntem” => Get “,” Header “=>” Kabul-dil
“,)); // Docs: https://www.php.net/manual/en/fonction.stream-context-create.php $ context = stream_context_create ($ opts); // HTTP dosyasını kullanarak dosyayı açın Yukarıda ayarlanan başlıklar // dokümanlar: https://www.php.net/manual/en/fonction.file-betcestents.php $ file = file_get_contents (‘https://www.google.com/’, yanlış, $ bağlam); artık kolay değil. Ve sonra bu örneğin hata tedavisi olmadığını düşünün. Bu nedenle, uzun mesafeli sunucuların kibarca cevap vereceğinden% 100 emin değilseniz (talimatlar: yapmazsınız), daha fazlasını eklemelisiniz Üretim kodunda kullanılmadan önce çok basit olan file_get_contents () ‘yi sarmak için kodlar.
HTTP PHP kütüphanelerinin sayısı, RAW RAW PHP kullanarak HTTP istekleri yaptığı için, HTTP taleplerinin yapımını kolaylaştıran düzinelerce yardımcı kütüphanenin olması şaşırtıcı olmamalıdır. Bağımlılık yönetimi için bestecilere bağlı olan WordPress’in dışında olan daha geniş PHP dünyasında, GUKULE ve HTTPul, HTTP isteklerini yerine getiren en popüler kütüphanelerden biridir, ancak aralarından seçim yapabileceğiniz düzinelerce kişi vardır. Her şey güçlü ve zayıf yönleriyle. WordPress dünyasında, özellikle bu kodu diğer WordPress kullanıcılarına gönderecekseniz, besteci kitaplığını kullanmadan önce biraz dikkatli olmalıyız. Bunun iki ana nedeni vardır. İlk ve en önemlisi, sizin veya kullanıcınızın cehennem bestecisi bağımlılığının çeşitli versiyonlarında sona erme riski vardır. Kısacası, aynı WordPress kurulumundaki diğer eklentiler, eklentinizle aynı bağımlılığı kullanır, ancak eklenti farklı bir bağımlılık sürümünü kullanır. WordPress, eklentileri yüklemek için deterministik bir yola sahiptir. Teknik olarak eklentilerin sırasını kesmek mümkün olsa da, önerilmez. Buna ek olarak, eklentinizi önce yüklemeye zorlamak için oynarsanız oynayın, diğer geliştiriciler de oynayabilir. Bu nedenle, eklentinizin gönderdiğiniz bağımlılık sürümünü veya uyumlu olmayabilecek başka bir sürümü kullanıp kullanmayacağını asla bilemezsiniz.
Tüm besteci bağımlılıklarını kendi PHP ad alanınıza sarabilecek bir imposter eklentisi kullanarak bunun üstesinden gelmenin birkaç yolu vardır. Rotayı takip edebilirsiniz, ancak HTTP isteklerini yönetmek için bir besteci paketi kullanmak kolay görünen fikir aniden üretim sürecinizi değiştirebilecek çok daha büyük bir soruna dönüşür. Kendi ürün WP boşaltma ortamımızda, depolama sağlayıcılarını (Amazon AWS, dijital okyanus, vb.) Destekleyen üçüncü bir bölüm kütüphanesi kullanıyoruz ve bu da HTTP GULle kütüphanesini kullanıyor. Diğer eklentilerle uyumluluk sorunlarından kaçınmak için, tüm bağımlılıkları ayrı ad alanına sarmak için dolandırıcıları kullanıyoruz. HTTP istekleri için bir üçüncü taraf kütüphanesi kullanmadan önce iki kez düşünmemiz gereken bir başka nedeni, WordPress tarama işlemini kısaltmasıdır. En kaliteli WordPress’ten biri, eylemler ve filtreler yoluyla özelleştirilebilen ve HTTP istekleri yapmak için bir istisna olmayan çok şeydir. Bu yazının bir sonraki bölümünde daha ayrıntılı olarak tartışacağız, ancak Fırsat Sitesinin sahibine, HTTP isteklerini özel ihtiyaçlarına uygun olarak değiştirecek şekilde değiştirmek için vereceğiz. Çok iyi bir nedeniniz olmadığı sürece bu özelliği silmemelisiniz.
WP_REMOTE_GET, WP_REMOTE_POST’a merhaba deyin ve son 12 yıl boyunca arkadaşlar WordPress, WP_REMOTE_GET (), WP_REMOTE_POST () ve WP_REMOTE_HEAD () ve Head ve Head ve Head ve Head ve Head ve HeAby HTP isteklerini işlemek için kendi varsayılan işleviyle gönderdi. Bu üç global işlevin tümü, WP_http sınıfı etrafında sarma olarak işlev görür ve bu da istek kitaplığını kullanır. WordPress’in http yapmak için curl’u nasıl kullandığına dair yazımızda önceki istek kütüphanesi hakkında biraz yazdık. Wp_remote_get () kullanmak şu kadar basit olabilir: $ tepki = wp_remote_get (‘https://www.google.com/’ ‘ ); WP_REMOTE_*ailesinde işlevleri kullanmayı tercih etmenin birçok nedeni var, işte en önemli şey olduğunu düşünüyorum. Her zaman wp_remote_* işlevine sahiptirler* neredeyse en başından beri WordPress’te olmuştur, böylece endişelenmenize gerek yoktur. WordPress çekirdeğindeki eklenti kurulumları ve otomatik güncellemeler gibi bazı önemli işlevler, bu işlevlere ve işlevlere bağlıdır. Dolayısıyla, HTTP istekleri için üçüncü taraf kütüphanesi eklemek için gerçek bir neden yoktur, zaten iyi ve güvenilir bir kütüphaneye erişiminiz vardır.
Bu işlevin ikinci parametresi aracılığıyla ek argümanlara devam ederek neredeyse tüm HTTP protokol özelliklerine erişebilirsiniz. Başlıklar ekleyebilir, kullanıcı aracısı dizesini değiştirebilir, HTTP protokolünün belirli sürümlerini zorlayabilirsiniz. Ayrıca SSL sertifikaları için kendi konumunuzu belirleyebilir, SSL sertifikalarının doğrulanmasını devre dışı bırakabilir, isteklerin bekleme süresini değiştirebilir (tükenme süresi) veya hatta gerekirse HTTP fiilleri ekleyebilirsiniz. Bu blog gönderisinde iki HTTP fiili için bir ambalaj eklediğini gerçekten göreceğiz. Aşağıda, uzak bir sunucuya göndermeden önce hafif bir HTTP isteğini değiştirdiğim bir örnek: $ args = dizi (// zaman aşımını 5 ila 10 saniye ‘zaman aşımı’ => 10, // varsayılanın üzerine yazın varsayılanın üzerine yazın : “WordPress/ 5.8; www.mysite.tld” başlık: ‘Kullanıcı-Ajanı’ => ‘Özel WordPress kurulumum’, // Birkaç özel HTTP Başlığı ‘Başlıkları’ => Dizisi (‘X-Custom-Id ‘=>’ ABC123 ‘,’ X-Secret-Thing ‘=>’ Gizli ‘, // HTTP sunucularını doğrulamayı atlayın SSL cert;’ sslverify ‘=> false,); $ Response = wp_remote_get (‘https://www.example.com/’, $ args);
Geçerli argümanların tam bir listesi tam olarak belgelenmez, ancak HTTP sınıfının kendisi için kaynak dosyasında veya bu yararlı yorumda, wp_remote_get (), wp_remote_post () ve wp_remote_head () için çoğu kullanım durumunu işleyebilir. HTTP İstekleri HTTP istekleri için HTTP istekleri için HTTP istekleri için HTTP istekleri için düşünebilirim. Yani gerçekte, WordPress’te üçüncü taraf bir HTTP kütüphanesi kullanmanız gereken çok az durum var. Temel istek kütüphanesini kullanarak, bazı istekleri aynı anda gerçekleştirmek için doğuştan gelen işlevi kullanmak bile mümkündür, ancak bu blogu yayınlama kapsamının biraz ötesindedir. HTTP isteği yürütme sırasında kolayca ayarlanırlar, WP_REMOTE_* ‘nin tüm işlevleri, size ve başkalarının doğru davranışı değiştirmesine veya hatta harici URL’leri engellemesine izin veren birçok farklı WordPress filtresini arayacaktır. Bu, sadece kendi HTTP isteğinizi ayrıntılı olarak kontrol edemeyeceğiniz anlamına gelir, aynı zamanda diğer eklentiler tarafından yapılan HTTP isteklerine veya hatta Core WordPress’in kendisi de müdahale edebilirsiniz. Büyük bir şirkette birkaç dahili WordPress kurulumundan sorumlu olduğunuzu düşünün. Dahili BT güvenlik kurallarına uymak için, HTTP isteklerinde kullanıcı aracısı dizesine otomatik olarak eklenen dahili sitenin URL’sini gizlemeniz gerekir. Bunu nasıl başaracaksınız? Peki, wp_remote_get () ve tüm arkadaşları, istek gönderilmeden önce http_request_args filtrelerini tetikleyecek, böylece basit bir WordPress filtresi kullanarak değiştirebiliriz: işlev my_http_request_args ($ args) {$ args [‘user-agent’] = ”

WordPress ‘; Dönüş $ args; } add_filter (‘http_request_args’, ‘my_http_request_args’); Bazı site sahiplerinin HTTP trafiğini harici URL’lere hiç engellemesi gerekebilir. WP_REMOTE_GET (), wp_remote_post () veya wp_remote_head () kullanılarak yapılan tüm istekler wp_http_block_external ve wp_accesible_hosts’a saygı duyar. WP Migrate DB Pro için belgelerimizde bunun hakkında biraz yazdık. Belirlenirse, bu iki sabit, site sahibinin tüm trafiği durdurmasına izin verecektir, ancak isteğe bağlı olarak bir dizi istisna sağlar: tanımlayın (‘wp_http_block_external’, true); Tanımlama (‘wp_accesible_hosts’, ‘api.example.com, www.example.com’); Başka bir ana bilgisayara istekler artık wp_error döndürür: $ tepki = wp_remote_get (‘https://www.google.com’); /* Döner: wp_error object ([hatalar] => dizi ([http_request_not_executued] => dizi ([0] => kullanıcı http aracılığıyla istekleri engelledi.) …)*/ Kodunuzdaki doğuştan HTTP işlevini kullanarak, Kullanıcınız, ek bir kod satırı yazmak zorunda kalmadan bu HTTP isteğinden tüm düşük seviyeli kontrolleri alır. Bu ne kadar harika !!
? Bunlar, istek kütüphanesinden, onu yukarıdakilerin bazılarından ayıran agnostik taşıma düzgün özellikleridir. Daha spesifik olarak HTTP istekleri durumunda, web sunucusuna yüklenen kıvrılma modülüne bağlı değildir. Kütüphane talebi, kurulmuşsa bukleleri kullanmayı tercih eder. Ancak kıvrılma mevcut değilse, istek kütüphanesi bunun yerine fsockopen () kullanmaya geri dönebilir. Her iki durumda da, istek kütüphanesi çalışmayı tamamlayacak, böylece test edilecek, belgelenecek veya endişelenmek için daha az bağımlılığınız olacak. WP_REMOTE_PUT ve WP_REMOTE_DELETE ne olacak? Uzun mesafeli bir yangınla küçük bir iş yaptıysanız ve HTTP fiili etrafındaki yolu biliyorsanız, şimdiye kadar wp_remote_put () veya wp_remote_delete () bahsetmediğimi fark etmiş olabilirsiniz. GET, Post ve Head için doğuştan gelen uygulamaya sahip olduğumuz için, açıkçası Put ve Sil için de bir uygulama olmalıdır. Doğru? Evet hayır. WordPress Core ekibi tüm standart HTTP fiillerini uygulamamıştır. Ancak, önümüzdeki sürümde olabilmesi için bir WordPress problem izleyicisine ekleme konusunda devam eden bir tartışma vardı. Bu işleve daha hızlı ihtiyacınız varsa, wp_http sınıfının modüler doğası, wp_remote_request sarma işlevi ile birleştiğinde, her ikisini de kendi kodunuza eklemeyi çok kolaylaştırır: if (! Function_exists (‘wp_remote_put’)) {function wp_remote_put ($ url , $ args ($ url, $ args ($ url, $) {$ varsayılan = array (‘yöntem’ => ‘put’); $ r = wp_parse_args ($ args, $ varsayılan); dönüş wp_remote_request ($ url, $ r);

admin

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir