POST İstekleri

Bu dokümanda, HTTP POST kullanarak neden ve nasıl resim isteneceği açıklanmaktadır.

Genel bakış

Kod içinde resim isteğinde bulunuyorsanız veya 2K karakterden uzun bir URL'ye ihtiyacınız varsa resim isteğinizi HTTP POST kullanarak göndermeniz gerekir. İnfografik sunucusu, 16K uzunluğa kadar HTTP POST isteklerini destekler.

En temel POST isteği türüne ilişkin örneği burada bulabilirsiniz: <form> öğesi kullanma:

Bu resim aslında <iframe> içinde barındırılan bir sayfa. Form kodu:

<form action='https://chart.googleapis.com/chart' method='POST'>
  <input type='hidden' name='cht' value='qr' />
  <input type='hidden' name='chs' value='300x300' />
  <input type='hidden' name='chl' value='This is my QR code'/>
  <input type='submit'  />
</form>

Geçerli bir POST isteğinin yanıtı, GET isteği yanıtıyla aynı olan bir PNG resmidir.

İpucu: Bazı tarayıcılar, belirli bir URL'ye yapılan istekleri önbelleğe aldığı için POST parametrelerini değiştirseniz bile tarayıcı resim sunucusunu yeniden sorgulamaz. Bu durum, sık sık değişen bir görüntüyü yeniden yüklemeye çalışırken soruna neden olabilir (bu, test sırasında soruna neden olabilir). Bu sorunu çözmek için POST URL'sinin sonuna ?chid=value ekleyin. Burada value her istekle değişir: Resim sunucusu bu parametreyi yoksayar ve tarayıcı sorguyu yeniden gönderir ve yalnızca önbelleğe alınan sürümü yeniden yüklemez.

POST'u kullanmanın birkaç yolu vardır ve bunların tümü, sayfa kodunda veya sayfayı barındıran sunucuda ek kodlama gerektirir. POST işlevini kullanmak için genellikle her resim için ayrı bir sayfa oluşturur ve bu sayfaları <iframe> kullanarak ya da aşağıda gösterildiği gibi bir <img> etiketi olarak ana sayfanıza eklersiniz veya bağlantılandırırsınız.

Aşağıda, POST yönteminin hem JavaScript hem de PHP ile kullanılmasına ilişkin örnekler verilmiştir.

POST İsteği için JavaScript Kullanma

JavaScript POST isteği yapmanın en kolay yolu, <input> öğelerinde resim verileri içeren bir form barındıran bir sayfa oluşturmak ve sayfanın, isteği onLoad() işleyicisinde POST yapmasını sağlamaktır. Bu durumda sayfa, resim PNG ile değiştirilir. Bu resmi barındıran sayfa, bu sayfayı bir <iframe> kullanarak içermelidir. Resim sayfasının kodu:

Not: Aşağıdaki örnekte, URL'deki değişen değere ayarlanmış bir chid parametresi bulunmaktadır. Bu durum, tarayıcının yukarıdaki ipucunda açıklanan nedenden dolayı yenilenmesine neden olur. Resminiz sık değişmiyorsa bu parametreyi eklemeniz gerekmez.

post_infographic.html

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <script type='application/javascript'>
    // Send the POST when the page is loaded,
    // which will replace this whole page with the retrieved image.
    function loadGraph() {
      var frm = document.getElementById('post_form');
      if (frm) {
       frm.submit();
      }
    }
  </script>
  </head>
  <body onload="loadGraph()">
    <form action='https://chart.googleapis.com/chart' method='POST' id='post_form'
          onsubmit="this.action = 'https://chart.googleapis.com/chart?chid=' + (new Date()).getMilliseconds(); return true;">  <input type='hidden' name='cht' value='qr' />
      <input type='hidden' name='cht' value='qr' />
      <input type='hidden' name='chs' value='300x300' />
      <input type='hidden' name='chl' value='This is my QR code' />
      <input type='submit'  />
    </form>
  </body>
</html>

<form> öğesi kullanıyorsanız dizelerinizi URL olarak kodlamanız gerekmez.

Daha sonra bu resim, ana makine sayfanızda bir <iframe> kullanılarak şu şekilde başka bir sayfaya yüklenebilir:

another_page.html

<iframe src="post_infographic.html" width="300" height="200"></iframe>

POST İsteği için PHP kullanma

Sunucu tarafı dillerinin çoğu, açık POST isteklerini destekler. PHP kullanarak POST isteği göndermeyle ilgili bir örneği burada bulabilirsiniz. Bu örnekte, 150 rastgele değer ile QR kodu oluşturan bir sayfa gösterilmektedir. Bunu kendiniz kullanmak isterseniz $qrcode dizisini kendi değerlerinizi içerecek şekilde özelleştirirsiniz.

Not: Aşağıdaki örnekte, URL'deki değişen değere ayarlanmış bir chid parametresi bulunmaktadır. Bu durum, tarayıcının yukarıdaki ipucunda açıklanan nedenden dolayı yenilenmesine neden olur. Resminiz sık değişmiyorsa bu parametreyi eklemeniz gerekmez.

resimsunucusu-resim.php

<?php
  // Create some random text-encoded data for a QR code.
  header('content-type: image/png');
  $url = 'https://chart.googleapis.com/chart?chid=' . md5(uniqid(rand(), true));
  $chd = 't:';
  for ($i = 0; $i < 150; ++$i) {
    $data = rand(0, 100000);
    $chd .= $data . ',';
  }
  $chd = substr($chd, 0, -1);

  // Add image type, image size, and data to params.
  $qrcode = array(
    'cht' => 'qr',
    'chs' => '300x300',
    'chl' => $chd);

  // Send the request, and print out the returned bytes.
  $context = stream_context_create(
    array('http' => array(
      'method' => 'POST',
      'content' => http_build_query($qrcode))));
  fpassthru(fopen($url, 'r', false, $context));
?>

Bu resmi yerleştirmek JavaScript örneğinden daha kolaydır. Bunun nedeni, aşağıda gösterildiği gibi POST sayfanıza bir <img> etiketiyle yönlendirme yapmanızdır:

another_page.html

<img width='300' height='300' src='imageserver-image.php'>