POST POST bằng cURL trong PHP


126

Làm cách nào tôi có thể thực hiện POST POST trong PHP bằng cURL?

Bài đăng thô như trong mà không có bất kỳ mã hóa, và dữ liệu của tôi được lưu trữ trong một chuỗi. Dữ liệu phải được định dạng như thế này:

... 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

Một tùy chọn là viết thủ công toàn bộ tiêu đề HTTP được gửi, nhưng điều đó có vẻ ít tối ưu hơn.

Dù sao, tôi có thể chuyển các tùy chọn cho curl_setopt () có nghĩa là sử dụng POST, sử dụng text / plain và gửi dữ liệu thô từ a $variablekhông?

Câu trả lời:


229

Tôi chỉ tìm ra giải pháp, loại trả lời cho câu hỏi của riêng tôi trong trường hợp có ai khác vấp phải nó.

$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 sẽ đặt tiêu đề có độ dài nội dung cho bạn hay bạn cũng nên đặt tiêu đề đó?
Eric Bloch

3
Tôi không thể làm điều này để làm việc cả. Tôi có một trang mà tôi đang cố gắng đăng dữ liệu thô lên. Trang đó ghi lại tất cả dữ liệu thô mà nó nhận được vào bảng cơ sở dữ liệu. Không có hàng mới nào cả. Bạn có biết nếu có bất cứ điều gì đã thay đổi ở đây kể từ '09?
James

1
Điều này làm việc cho tôi, mà không chỉ định bất kỳ tiêu đề HTTP.
xryl669

12
Tôi chỉ nhận ra rằng cơ thể ở đây có thể bao gồm bất kỳ chuỗi json hợp lệ.
shasi kanth

1
Có giới hạn 2G cho bài thô này. Nếu bạn cố gửi tệp lớn hơn 2G, chúng sẽ bị cắt lại thành 2G. Đó là một hạn chế của loại chuỗi đang được tải.
Kaden Yealy

5

Thực hiện với thư viện Guheads:

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

Phần mở rộng PHP CURL:

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

Mã nguồn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.