PHP'de cURL kullanarak RAW POST


126

CURL kullanarak PHP'de nasıl RAW POST yapabilirim?

Herhangi bir kodlama olmadan olduğu gibi ham gönderi ve verilerim bir dizede saklanıyor. Veriler şu şekilde biçimlendirilmelidir:

... usual HTTP header ...
Content-Length: 1039
Content-Type: text/plain

89c5fdataasdhf kajshfd akjshfksa hfdkjsa falkjshfsa
ajshd fkjsahfd lkjsahflksahfdlkashfhsadkjfsalhfd
ajshdfhsafiahfiuwhflsf this is just data from a string
more data kjahfdhsakjfhsalkjfdhalksfd

Bir seçenek, gönderilen HTTP başlığının tamamını manuel olarak yazmaktır, ancak bu daha az optimal görünmektedir.

Her neyse, curl_setopt () 'a POST kullan, metin / düz kullanın ve ham verileri a'dan gönderen seçenekleri iletebilir miyim $variable?

Yanıtlar:


229

Çözümü buldum, başka birinin tökezlemesi ihtimaline karşı kendi sorumu yanıtlamak gibi.

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,            "http://url/url/url" );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST,           1 );
curl_setopt($ch, CURLOPT_POSTFIELDS,     "body goes here" ); 
curl_setopt($ch, CURLOPT_HTTPHEADER,     array('Content-Type: text/plain')); 

$result=curl_exec ($ch);

4
php sizin için içerik uzunluğu başlığını ayarlayacak mı yoksa bunu da ayarlamanız gerekir mi?
Eric Bloch

3
Bunu hiç çalıştıramıyorum. Ham verileri göndermeye çalıştığım bir sayfam var. Bu sayfa aldığı tüm ham verileri bir veritabanı tablosuna kaydeder. Hiç yeni satır yok. '09'dan beri burada bir değişiklik olup olmadığını biliyor musunuz?
James

1
Bu, herhangi bir HTTP başlığı belirtmeden benim için çalışıyor.
xryl669

12
Buraya giden gövdenin geçerli herhangi bir json dizesini içerebileceğini yeni fark ettim .
shasi kanth

2
Bu ham gönderi için 2G sınırı vardır. 2G'den daha büyük bir dosya göndermeye çalışırsanız, dosyalar 2G'ye kısaltılır. Yüklenmekte olan dize türünün bir sınırlamasıdır.
Kaden Yealy

5

Guzzle kütüphanesi ile uygulama:

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$response = $httpClient->post(
    'https://postman-echo.com/post',
    [
        RequestOptions::BODY => 'POST raw request content',
        RequestOptions::HEADERS => [
            'Content-Type' => 'application/x-www-form-urlencoded',
        ],
    ]
);

echo(
    $response->getBody()->getContents()
);

PHP CURL uzantısı:

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/post',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify POST method
     */
    CURLOPT_POST => true,

    /**
     * Specify request content
     */
    CURLOPT_POSTFIELDS => 'POST raw request content',
]);

$response = curl_exec($curlHandler);

curl_close($curlHandler);

echo($response);

Kaynak kodu

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.