POST İstekleri

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

Genel bakış

Kodda resim isteğinde bulunuyorsanız veya 2K karakterden uzun bir URL'ye ihtiyacınız varsa resim isteğinizi HTTP POST aracılığıyla göndermeniz gerekir. infografikler sunucusu, HTTP POST isteklerini en fazla 16K uzunluğunda destekler.

En temel POST isteği türüne örnek: <form> öğesi kullanma:

Bu resim aslında <iframe> içinde barındırılan bir sayfa. Form kodunu aşağıda bulabilirsiniz:

<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ğine verilen yanıt, bir GET isteği yanıtıyla aynı olan PNG resmidir.

İpucu: Bazı tarayıcılar istekleri belirli bir URL'ye önbelleğe alır. Bu nedenle, POST parametrelerini değiştirseniz bile tarayıcı gerçekte resim sunucusunu yeniden sorgulamaz. Bu, sık değişen bir resmi yeniden yüklemeye çalışırken sorun yaşamanıza neden olabilir (test sırasında sorun olabilir). Bu sorunu çözmek için POST URL'sinin sonuna ?chid=value ekleyin. Burada value, her istekte değişir: Resim sunucusu bu parametreyi yoksayar ve tarayıcı, yalnızca önbelleğe alınan sürümü yeniden yüklemekle kalmayıp sorguyu yeniden gönderir.

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 özelliğini kullanmak için genellikle her görsel için ayrı bir sayfa oluşturursunuz ve bu sayfaları, aşağıda gösterildiği gibi <iframe> veya <img> etiketleri olarak ana sayfanıza yerleştirebilir ya da bağlantı verebilirsiniz.

Aşağıda, POST'un hem JavaScript hem de PHP ile kullanımına dair örnekler verilmiştir.

POST İsteği için JavaScript kullanma

JavaScript POST isteğinde bulunmanın en kolay yolu, <input> öğelerinde resim verileri içeren bir form barındıran bir sayfa oluşturup bunu POST sayfasının onLoad() işleyicisinde bulundurmasını sağlamaktır. Sayfa, resim PNG ile değiştirilir. Bu resmi barındıran sayfa bir <iframe> kullanarak bu sayfayı içermelidir. Resim sayfasının kodu şöyledir:

Not: Aşağıdaki örnekte, URL'de değişen değere ayarlanmış bir chid parametresi bulunmaktadır. Bu, tarayıcının yukarıdaki ipucunda açıklanan nedenden dolayı yenilenmesine neden olur. Resminiz sık sık değişmiyorsa söz konusu 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 olduğu gibi bir <iframe> kullanılarak başka bir sayfaya yüklenebilir:

başka_sayfa.html

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

POST İsteği için PHP'yi 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ğerle QR kodu oluşturan bir sayfa gösterilmektedir. Bunu kendiniz kullanmak için $qrcode dizisini kendi değerlerinizi içerecek şekilde özelleştirirsiniz.

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

resimsunucusu-resim.csv

<?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));
?>

Burada gösterildiği gibi POST sayfanızı bir <img> etiketiyle işaret edebileceğiniz için bu resmi yerleştirmek JavaScript örneğinden daha kolaydır:

başka_sayfa.html

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