PHP에서 cURL을 사용한 RAW POST


126

cURL을 사용하여 PHP에서 RAW POST를 수행하려면 어떻게해야합니까?

인코딩이없는 원시 게시물과 내 데이터는 문자열에 저장됩니다. 데이터는 다음과 같은 형식이어야합니다.

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

한 가지 옵션은 전송되는 전체 HTTP 헤더를 수동으로 작성하는 것입니다.

어쨌든, POST를 사용하고 텍스트 / 일반을 사용하고 원시 데이터를 보내는 curl_setopt () 옵션을 전달할 수 $variable있습니까?

답변:


229

나는 다른 누군가가 우연히 발견 할 경우를 대비하여 내 질문에 대답하는 해결책을 찾았습니다.

$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가 콘텐츠 길이 헤더를 설정합니까, 아니면 설정해야합니까?
에릭 블로흐

3
나는 이것을 전혀 작동시킬 수 없습니다. 원시 데이터를 게시하려는 페이지가 있습니다. 해당 페이지는 수신 한 모든 원시 데이터를 데이터베이스 테이블에 기록합니다. 새 행이 전혀 없습니다. '09 년 이후로 여기에서 변경된 사항이 있는지 아십니까?
James

1
이것은 HTTP 헤더를 지정하지 않고 나를 위해 작동합니다.
xryl669 2014 년

12
본문이 여기에 들어가면 유효한 json 문자열이 포함될 수 있음을 깨달았습니다 .
shasi kanth

1
이 원시 게시물에는 2G 제한이 있습니다. 2G보다 큰 파일을 보내려고하면 2G로 다시 잘립니다. 로드되는 문자열 유형의 제한입니다.
Kaden Yealy

5

Guzzle 라이브러리로 구현 :

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 확장 :

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

소스 코드

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.