29 Haziran 2020 Pazartesi

Http Post ve application/x-www-form-urlencoded

Giriş
Http ile POST işlemi için 3 seçenek var.

1. application/x-www-form-urlencoded (the default) - Parametre Gönderir
2. multipart/form-data - Dosya Gönderir
3. text/plain - Bilmiyorum

1. application/x-www-form-urlencoded - Parametre Göndermek İçindir
Sorgu string'i gibi şeyleri göndermek için kullanılır.

Http Get isteğinde veri key1=value1&key2=value2 şeklindeki URL içinde gönderilir.
Post isteğinde veriyi URL içine koyma imkanı yok ancak benzer bir mantık güdülerek parametreler Body içine koyuluyor.

Örnek
Post isteğini Postman ile şöyle görürürüz.
Headers: 
  Content-Type: application/x-www-form-urlencoded
Body:
  username: <my-username>
  password: <my-password>
Örnek
Şöyle yaparız
POST /test HTTP/1.1
Host: foo.example
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

field1=value1&field2=value2
Örnek
Şöyle yaparız.
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
request.Method = "POST";
request.ContentLength = data.Length;
request.ContentType = "application/x-www-form-urlencoded";

using (StreamWriter sw = new StreamWriter(request.GetRequestStream(),
  System.Text.Encoding.ASCII))
{
  sw.Write(data);
  sw.Close();
 }
Örnek
Swift ile pot işlemi için şöyle yaparız.
func post (){
 let url = URL(string: "https://the-game-stevens-apps.c9users.io/index.html/")!
 var request = URLRequest(url: url)
 request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Accept")
 request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
 request.httpMethod = "POST"
 let postString = "name=henry&message=HelloWorld"
 request.httpBody = postString.data(using: .utf8)
  ...
}
2. multipart/form-data
Dosya yüklemek için kullanılır. Açıklaması şöyle.
The content type "application/x-www-form-urlencoded" is inefficient for sending large quantities of binary data or text containing non-ASCII characters. The content type "multipart/form-data" should be used for submitting forms that contain files, non-ASCII data, and binary data.

3. text/plain
Tam olarak ne işe yarar bilmiyorum.

1 yorum: