Php Curl Post anahtarsız veri göndermek
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.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (3)
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
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];
$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());