source

CURLOPT_POSTFILDS의 컬 POST 형식

itover 2023. 1. 5. 20:26
반응형

CURLOPT_POSTFILDS의 컬 POST 형식

사용할 때curl경유로POST및 세트CURLOPT_POSTFIELD꼭 해야 하나요?urlencode또는 특별한 포맷이 있나요?

예를 들어 다음과 같습니다.2개의 필드를 투고하는 경우, 첫 번째와 마지막:

first=John&last=Smith

컬과 함께 사용해야 하는 정확한 코드/형식은 무엇입니까?

$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$reply=curl_exec($ch);
curl_close($ch);

문자열을 송신하는 경우는, 그것을 urlencode()로 합니다.그렇지 않은 경우 어레이의 경우 키=>값 쌍과Content-typeheader는 자동으로 설정됩니다.multipart/form-data.

또한 어레이 쿼리를 작성하기 위해 추가 함수를 작성할 필요가 없습니다.이미 다음과 같은 기능이 준비되어 있습니다.

$query = http_build_query($data, '', '&');

편집: php5 이상에서는 다음을 사용하는 것이 좋습니다.

string http_build_query ( mixed $query_data [, string $numeric_prefix [, 
                          string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] )

설명서의 간단한 예:

<?php
$data = array('foo'=>'bar',
              'baz'=>'boom',
              'cow'=>'milk',
              'php'=>'hypertext processor');

echo http_build_query($data) . "\n";

/* output:
foo=bar&baz=boom&cow=milk&php=hypertext+processor
*/

?>

php5 이전:

매뉴얼:

CURLOPT_POST 필드

HTTP "POST" 작업에서 게시하는 전체 데이터.파일을 투고하려면 파일 이름 앞에 @ 를 붙이고 풀 경로를 사용합니다.파일 형식은 파일 이름 뒤에 ';type=syslogtype' 형식을 지정하여 명시적으로 지정할 수 있습니다.이 파라미터는 urlencoded string('1=val1&val2=val2&...' 등)으로 전달하거나 필드명을 키로, 필드 데이터를 값으로 하는 배열로 전달할 수 있습니다. 값이 배열인 경우 Content-Type 헤더는 multipart/form-data로 설정됩니다.PHP 5.2.0에서는 이 옵션에 @ 프리픽스로 전달된 파일이 동작하기 위해서는 어레이 형식이어야 합니다.

따라서 다음과 같은 기능이 완벽하게 작동해야 합니다(관련 배열로 전달된 매개 변수).

function preparePostFields($array) {
  $params = array();

  foreach ($array as $key => $value) {
    $params[] = $key . '=' . urlencode($value);
  }

  return implode('&', $params);
}

끈을 전혀 건네지 마세요!

배열을 전달하고 php/curl이 인코딩 등의 더러운 작업을 수행하도록 할 수 있습니다.

에 따라 다릅니다.content-type

url-multipart/form-data 중 하나

브라우저가 폼에서와 같이 표준적인 방법으로 데이터를 전송하려면 관련 어레이를 전달하기만 하면 됩니다.PHP 매뉴얼에 기재된 바와 같이:

이 파라미터는 urlencoded string('1=val1&val2=val2&...' 등)으로 전달하거나 필드명을 키로, 필드 데이터를 값으로 하는 배열로 전달할 수 있습니다.값이 배열인 경우 Content-Type 헤더는 multipart/form-data로 설정됩니다.

JSON 부호화

단, JSON API와 통신할 때는 POST 데이터를 API가 이해할 수 있도록 콘텐츠를 JSON 인코딩해야 합니다.

이 경우 콘텐츠는 JSON으로 명확하게 부호화되어야 합니다.

CURLOPT_POSTFIELDS => json_encode(['param1' => $param1, 'param2' => $param2]),

JSON에서 통신할 때는 보통 다음과 같이 설정합니다.accept ★★★★★★★★★★★★★★★★★」content-type헤더를 지정합니다.

CURLOPT_HTTPHEADER => [
    'accept: application/json',
    'content-type: application/json'
]

★★★의 CURLOPT_POSTFIELDS urlencoded urlencoded urlencoded urlencoded urlencoded urlencoded 등의 urlencoded 할 수 para1=val1&para2=val2&..로 하고 할 수도 있습니다.

다음 형식을 사용해 보십시오.

$data = json_encode(array(
"first"  => "John",
"last" => "Smith"
));

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);

되지 않은 또의 큰 은 '다르다'라는 이다.CURLOPT_POSTFIELDS을 사용법

를 사용했을 ['a' => 1, 'b' => [2, 3, 4]] 이거는 '으로 하다'로 해야 요.a=1&b[]=2&b[]=3&b[]=4(the)[ ★★★★★★★★★★★★★★★★★」]URL " " " " " " " " 。이것은 자동적으로 다른 한쪽 끝의 네스트된 배열로 변환됩니다(여기에서는 다른 쪽 끝도 PHP라고 가정합니다).

이 조작은 유효합니다.

var_dump(http_build_query(['a' => 1, 'b' => [2, 3, 4]]));
// output: string(36) "a=1&b%5B0%5D=2&b%5B1%5D=3&b%5B2%5D=4"

이렇게 하면 안 돼요.

curl_setopt($ch, CURLOPT_POSTFIELDS, ['a' => 1, 'b' => [2, 3, 4]]);

그러면 알림이 표시됩니다.는 파라미터 「」를 합니다.b"Array":

PHP 알림:배열에서 문자열로 변환...온라인으로...

PHP 매뉴얼에 따르면 문자열로 cURL에 전달되는 데이터는 URL 인코딩되어야 합니다.curl_setopt() 페이지를 참조하여CURLOPT_POSTFIELDS.

우리는 CMS Effcore에 대한 테스트를 작성할 때 같은 솔루션을 찾고 있었습니다.이 솔루션은 매우 간단한 것으로 판명되었으며, 다음과 같습니다.

$data = [
  'name[0]' => 'value 1',
  'name[1]' => 'value 2',
  'name[2]' => 'value 3',
  'id'      => 'value 4'
];

$data = array(
  'name[0]' => 'value 1',
  'name[1]' => 'value 2',
  'name[2]' => 'value 3',
  'id'      => 'value 4'
);

흥미롭게도 Postman이 POST를 수행하는 방법은 다음 2가지 추가 옵션을 포함한 완전한 GET 작업입니다.

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, '');

다른 방법일 뿐이고, 아주 잘 작동합니다.

나도 이 답을 찾는 데 시간이 오래 걸렸다.URL(파일명과 확장자 뒤에?)을 URL로 인코딩된 쿼리 문자열과 연결하기만 하면 된다는 것을 알게 되었습니다.POST cURL 옵션을 설정할 필요가 없어 보입니다.다음의 가짜 예를 참조해 주세요.

//create URL
$exampleURL = 'http://www.example.com/example.php?';

// create curl resource
$ch = curl_init(); 

// build URL-encoded query string
$data = http_build_query(
    array('first' => 'John', 'last' => 'Smith', '&'); // set url
curl_setopt($ch, CURLOPT_URL, $exampleURL . $data); 

// return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

// $output contains the output string
$output = curl_exec($ch); 

// close curl resource to free up system resources <br/>
curl_close($ch);

이 경우에도 하실 수 있습니다.file_get_contents():

// read entire webpage file into a string
$output = file_get_contents($exampleURL . $data);

언급URL : https://stackoverflow.com/questions/5224790/curl-post-format-for-curlopt-postfields

반응형