v2.5.2
Giriş yap

Php Curl Post anahtarsız veri göndermek

trsherlock
626 defa görüntülendi

Herkese iyi günler.
Aşağıdaki kodların php.curl karşılığı lazım.
İstek atılan sunucu anahtarsız değer istiyor localhost kullanırken fetch ile çalışıyor fakat ip adresi kullanıldığında fetch çalışmıyor. O yüzden php.curl kullanmak istedim fakat bu seferde veri gönderme kısmına takıldım.

Bu konuda yardımcı olabilir misiniz?

fetch("https://backend-p.defterbeyan.gov.tr/rs/external/auth/loginWithToken", {
    "referrer": "https://portal.defterbeyan.gov.tr/",
    "referrerPolicy": "strict-origin-when-cross-origin",
    "body": "67b58efa-7c9a-43e0-b74a-e7d97bdb7eba",
    "method": "POST",
    "mode": "cors",
    "credentials": "omit"
})

Php tarafında kullandığım kodlar:

    $defterBeyan = curl_init();
    $t = "67b58efa-7c9a-43e0-b74a-e7d97bdb7eba";
    curl_setopt_array($defterBeyan, [
        CURLOPT_URL => "https://backend-p.defterbeyan.gov.tr/rs/external/auth/loginWithToken",
        CURLOPT_REFERER => "https://portal.defterbeyan.gov.tr/",
        CURLOPT_POST => 1,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_HEADER => true,
        CURLOPT_HTTPHEADER => array("content-type: text/plain"),
        CURLOPT_POSTFIELDS => $t
    ]);

Aldığım hata:

HTTP Status 415 – Unsupported Media Type
Type Status Report

Message Unsupported Media Type

Description The origin server is refusing to service the request because the payload is in a format not supported by this method on the target resource.
Cevap yaz
Cevaplar (3)
trsherlock
856 gün önce

Teşekkür ederim fakat çalışmadı. Ama ben çözümünü buldum. Har değerlerini kontrol ettim postData.mimeType değeri json belirtilmiş.
Ben text belirtmeme rağmen yanlış yöntemle gidiyormuş.

CURLOPT_HTTPHEADER => array("content-type: application/json") yapınca veriler geldi.

{
      "postData": {
        "mimeType": "application/json; charset=UTF-8",
        "params": [],
        "text": "21541265-45ce-4064-b2ab-a98107857398"
      }
    }

Yalnız başlık bilgilerini dizi olarak alabilmem mümkün mü?

HTTP/1.1 200 
Set-Cookie: JSESSIONID=63D6B8E04778547F25B3ABBB20B5E94D; Path=/; HttpOnly
Server-Time: 1658310818544
Token: **************
Content-Type: application/json;charset=UTF-8
Content-Length: 133
Date: Wed, 20 Jul 2022 09:53:38 GMT
munzevi
856 gün önce

anladım. aşağıdaki kodların php karşılığı lazım deyince, bende php karşılığını yazdım. hedef api de ki gereksinimler hakkında haliyle fikrim yoktu hala da yok. header'dan gelen verileri ayrıştırmak için preg_match kullanabilirsin https://www.php.net/manual/en/function.preg-match

çerezi almak istedğini varsaydığım bir örnek;

$header = 'HTTP/1.1 200 
Set-Cookie: JSESSIONID=63D6B8E04778547F25B3ABBB20B5E94D; Path=/; HttpOnly
Server-Time: 1658310818544
Token: **************
Content-Type: application/json;charset=UTF-8
Content-Length: 133
Date: Wed, 20 Jul 2022 09:53:38 GMT';
preg_match('/JSESSIONID=(.*?);/si',$header, $cerez);
echo $cerez[1];
munzevi
856 gün önce
$header = [
    "referrer: https://portal.defterbeyan.gov.tr/",
    "referrerPolicy: strict-origin-when-cross-origin",
    "body: 67b58efa-7c9a-43e0-b74a-e7d97bdb7eba",
    //"method: POST",
    "mode: cors",
    "credentials: omit",
    "content-type: text/plain"
    ];
$url = "https://backend-p.defterbeyan.gov.tr/rs/external/auth/loginWithToken";
$defterBeyan = curl_init();
curl_setopt_array($defterBeyan, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_SSL_VERIFYHOST => false,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_HTTPHEADER     => $header
]);

bu bir post verisi değil üstbilgi (header), dolayısıyla post methodunu kullanmanıza gerek yok, header içerisinde iletmeniz yeterli. kontrol etmek için de istek gönderdiğiniz sayfada aşağıdaki kodu çalıştırmanız yeterli.

print_r(getallheaders());